mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 10:22:05 -05:00
HackStudio: Do not spawn an intermediary shell
The Shell also puts each command into its own process group, which interferes with us trying to do the same here. We don't really need the shell here anyway, but it means we'll have to do command splitting ourselves.
This commit is contained in:
parent
8484635920
commit
1f5001c581
1 changed files with 10 additions and 6 deletions
|
@ -103,13 +103,17 @@ void TerminalWrapper::run_command(const String& command)
|
|||
perror("ioctl(TIOCSCTTY)");
|
||||
exit(1);
|
||||
}
|
||||
const char* args[4] = { "/bin/Shell", nullptr, nullptr, nullptr };
|
||||
if (!command.is_empty()) {
|
||||
args[1] = "-c";
|
||||
args[2] = command.characters();
|
||||
|
||||
setenv("TERM", "xterm", true);
|
||||
setenv("PATH", "/bin:/usr/bin:/usr/local/bin", true);
|
||||
|
||||
auto parts = command.split(' ');
|
||||
ASSERT(!parts.is_empty());
|
||||
const char** args = (const char**) calloc(parts.size() + 1, sizeof(const char*));
|
||||
for (int i = 0; i < parts.size(); i++) {
|
||||
args[i] = parts[i].characters();
|
||||
}
|
||||
const char* envs[] = { "TERM=xterm", "PATH=/bin:/usr/bin:/usr/local/bin", nullptr };
|
||||
rc = execve("/bin/Shell", const_cast<char**>(args), const_cast<char**>(envs));
|
||||
rc = execvp(args[0], const_cast<char**>(args));
|
||||
if (rc < 0) {
|
||||
perror("execve");
|
||||
exit(1);
|
||||
|
|
Loading…
Add table
Reference in a new issue