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:
Sergey Bugaev 2019-11-14 19:22:09 +03:00 committed by Andreas Kling
parent 8484635920
commit 1f5001c581

View file

@ -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);