diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-09-21 02:48:07 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-09-21 02:48:07 +0000 |
commit | d2f567776241013fedf5b690cd74fb6baad78b1c (patch) | |
tree | f613749891ff8f2db54b8a47879c97ffd02caa81 | |
parent | d1de4a16ad662bdd8e26da5662a5b0678ce4995e (diff) | |
download | busybox-d2f567776241013fedf5b690cd74fb6baad78b1c.tar.gz |
Add in exec support (patch from Torbj?rn Axelsson <torax@cendio.se>)
and disable backticks (since they are still wierdly broken in some
cases.
-rw-r--r-- | lash.c | 17 | ||||
-rw-r--r-- | sh.c | 17 | ||||
-rw-r--r-- | shell/lash.c | 17 |
3 files changed, 48 insertions, 3 deletions
@@ -26,7 +26,7 @@ */ -#define BB_FEATURE_SH_BACKTICKS +//#define BB_FEATURE_SH_BACKTICKS //#define BB_FEATURE_SH_IF_EXPRESSIONS #define BB_FEATURE_SH_ENVIRONMENT //#define DEBUG_SHELL @@ -108,6 +108,7 @@ struct builtInCommand { /* function prototypes for builtins */ static int builtin_cd(struct job *cmd, struct jobSet *junk); static int builtin_env(struct job *dummy, struct jobSet *junk); +static int builtin_exec(struct job *cmd, struct jobSet *junk); static int builtin_exit(struct job *cmd, struct jobSet *junk); static int builtin_fg_bg(struct job *cmd, struct jobSet *jobList); static int builtin_help(struct job *cmd, struct jobSet *junk); @@ -139,6 +140,7 @@ static int busy_loop(FILE * input); static struct builtInCommand bltins[] = { {"bg", "Resume a job in the background", builtin_fg_bg}, {"cd", "Change working directory", builtin_cd}, + {"exec", "Exec command, replacing this shell with the exec'd process", builtin_exec}, {"exit", "Exit from shell()", builtin_exit}, {"fg", "Bring job into the foreground", builtin_fg_bg}, {"jobs", "Lists the active jobs", builtin_jobs}, @@ -219,6 +221,19 @@ static int builtin_env(struct job *dummy, struct jobSet *junk) return (0); } +/* built-in 'exec' handler */ +static int builtin_exec(struct job *cmd, struct jobSet *junk) +{ + if (cmd->progs[0].argv[1]) + { + cmd->progs[0].argv++; + execvp(cmd->progs[0].argv[0], cmd->progs[0].argv); + fatalError("Exec to %s failed: %s\n", cmd->progs[0].argv[0], + strerror(errno)); + } + return TRUE; +} + /* built-in 'exit' handler */ static int builtin_exit(struct job *cmd, struct jobSet *junk) { @@ -26,7 +26,7 @@ */ -#define BB_FEATURE_SH_BACKTICKS +//#define BB_FEATURE_SH_BACKTICKS //#define BB_FEATURE_SH_IF_EXPRESSIONS #define BB_FEATURE_SH_ENVIRONMENT //#define DEBUG_SHELL @@ -108,6 +108,7 @@ struct builtInCommand { /* function prototypes for builtins */ static int builtin_cd(struct job *cmd, struct jobSet *junk); static int builtin_env(struct job *dummy, struct jobSet *junk); +static int builtin_exec(struct job *cmd, struct jobSet *junk); static int builtin_exit(struct job *cmd, struct jobSet *junk); static int builtin_fg_bg(struct job *cmd, struct jobSet *jobList); static int builtin_help(struct job *cmd, struct jobSet *junk); @@ -139,6 +140,7 @@ static int busy_loop(FILE * input); static struct builtInCommand bltins[] = { {"bg", "Resume a job in the background", builtin_fg_bg}, {"cd", "Change working directory", builtin_cd}, + {"exec", "Exec command, replacing this shell with the exec'd process", builtin_exec}, {"exit", "Exit from shell()", builtin_exit}, {"fg", "Bring job into the foreground", builtin_fg_bg}, {"jobs", "Lists the active jobs", builtin_jobs}, @@ -219,6 +221,19 @@ static int builtin_env(struct job *dummy, struct jobSet *junk) return (0); } +/* built-in 'exec' handler */ +static int builtin_exec(struct job *cmd, struct jobSet *junk) +{ + if (cmd->progs[0].argv[1]) + { + cmd->progs[0].argv++; + execvp(cmd->progs[0].argv[0], cmd->progs[0].argv); + fatalError("Exec to %s failed: %s\n", cmd->progs[0].argv[0], + strerror(errno)); + } + return TRUE; +} + /* built-in 'exit' handler */ static int builtin_exit(struct job *cmd, struct jobSet *junk) { diff --git a/shell/lash.c b/shell/lash.c index 60c51f619..b8f407202 100644 --- a/shell/lash.c +++ b/shell/lash.c @@ -26,7 +26,7 @@ */ -#define BB_FEATURE_SH_BACKTICKS +//#define BB_FEATURE_SH_BACKTICKS //#define BB_FEATURE_SH_IF_EXPRESSIONS #define BB_FEATURE_SH_ENVIRONMENT //#define DEBUG_SHELL @@ -108,6 +108,7 @@ struct builtInCommand { /* function prototypes for builtins */ static int builtin_cd(struct job *cmd, struct jobSet *junk); static int builtin_env(struct job *dummy, struct jobSet *junk); +static int builtin_exec(struct job *cmd, struct jobSet *junk); static int builtin_exit(struct job *cmd, struct jobSet *junk); static int builtin_fg_bg(struct job *cmd, struct jobSet *jobList); static int builtin_help(struct job *cmd, struct jobSet *junk); @@ -139,6 +140,7 @@ static int busy_loop(FILE * input); static struct builtInCommand bltins[] = { {"bg", "Resume a job in the background", builtin_fg_bg}, {"cd", "Change working directory", builtin_cd}, + {"exec", "Exec command, replacing this shell with the exec'd process", builtin_exec}, {"exit", "Exit from shell()", builtin_exit}, {"fg", "Bring job into the foreground", builtin_fg_bg}, {"jobs", "Lists the active jobs", builtin_jobs}, @@ -219,6 +221,19 @@ static int builtin_env(struct job *dummy, struct jobSet *junk) return (0); } +/* built-in 'exec' handler */ +static int builtin_exec(struct job *cmd, struct jobSet *junk) +{ + if (cmd->progs[0].argv[1]) + { + cmd->progs[0].argv++; + execvp(cmd->progs[0].argv[0], cmd->progs[0].argv); + fatalError("Exec to %s failed: %s\n", cmd->progs[0].argv[0], + strerror(errno)); + } + return TRUE; +} + /* built-in 'exit' handler */ static int builtin_exit(struct job *cmd, struct jobSet *junk) { |