diff --git a/userspace/programs/Shell/Builtin.cpp b/userspace/programs/Shell/Builtin.cpp index 7ff23b82..9f9fea6b 100644 --- a/userspace/programs/Shell/Builtin.cpp +++ b/userspace/programs/Shell/Builtin.cpp @@ -36,6 +36,23 @@ void Builtin::initialize() }, true )); + MUST(m_builtin_commands.emplace("exec"_sv, + [](Execute&, BAN::Span arguments, FILE*, FILE*) -> int + { + if (arguments.size() <= 1) + return 0; + + BAN::Vector argv; + for (size_t i = 1; i < arguments.size(); i++) + MUST(argv.push_back(arguments[i].data())); + MUST(argv.push_back(nullptr)); + + execvp(argv[0], const_cast(argv.data())); + exit(128 + errno); + ASSERT_NOT_REACHED(); + }, true + )); + MUST(m_builtin_commands.emplace("export"_sv, [](Execute&, BAN::Span arguments, FILE*, FILE*) -> int {