diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp index 585b767b7c..68008bc114 100644 --- a/Applications/Terminal/main.cpp +++ b/Applications/Terminal/main.cpp @@ -1,5 +1,6 @@ #include "TerminalWidget.h" #include +#include #include #include #include @@ -23,7 +24,7 @@ #include #include -static void make_shell(int ptm_fd) +static void run_command(int ptm_fd, String command) { pid_t pid = fork(); if (pid == 0) { @@ -71,7 +72,11 @@ static void make_shell(int ptm_fd) perror("ioctl(TIOCSCTTY)"); exit(1); } - const char* args[] = { "/bin/Shell", nullptr }; + const char* args[4] = { "/bin/Shell", nullptr, nullptr, nullptr }; + if (!command.is_empty()) { + args[1] = "-c"; + args[2] = command.characters(); + } const char* envs[] = { "TERM=xterm", "PATH=/bin:/usr/bin:/usr/local/bin", nullptr }; rc = execve("/bin/Shell", const_cast(args), const_cast(envs)); if (rc < 0) { @@ -133,6 +138,12 @@ int main(int argc, char** argv) { GApplication app(argc, argv); + CArgsParser args_parser("Terminal"); + + args_parser.add_arg("e", "execute", "Execute this command inside the terminal."); + + CArgsParserResult args = args_parser.parse(argc, argv); + if (chdir(get_current_user_home_path().characters()) < 0) perror("chdir"); @@ -142,7 +153,7 @@ int main(int argc, char** argv) return 1; } - make_shell(ptm_fd); + run_command(ptm_fd, args.get("e")); auto* window = new GWindow; window->set_title("Terminal");