diff options
-rw-r--r-- | shell/Config.in | 1 | ||||
-rw-r--r-- | shell/hush.c | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/shell/Config.in b/shell/Config.in index 0689b4ec2..312583e87 100644 --- a/shell/Config.in +++ b/shell/Config.in @@ -166,6 +166,7 @@ config HUSH select TRUE select FALSE select TEST + select ECHO help hush is a very small shell (just 18k) and it has fairly complete Bourne shell grammar. It even handles all the normal flow control diff --git a/shell/hush.c b/shell/hush.c index 912cbb5d9..6bf4d1d19 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -614,6 +614,7 @@ static void free_strings(char **strings) /* Function prototypes for builtins */ static int builtin_cd(char **argv); +static int builtin_echo(char **argv); static int builtin_eval(char **argv); static int builtin_exec(char **argv); static int builtin_exit(char **argv); @@ -652,6 +653,8 @@ struct built_in_command { #endif }; +/* For now, echo and test are unconditionally enabled. + * Maybe make it configurable? */ static const struct built_in_command bltins[] = { BLTIN("[" , builtin_test, "Test condition"), BLTIN("[[" , builtin_test, "Test condition"), @@ -661,6 +664,7 @@ static const struct built_in_command bltins[] = { // BLTIN("break" , builtin_not_written, "Exit for, while or until loop"), BLTIN("cd" , builtin_cd, "Change working directory"), // BLTIN("continue", builtin_not_written, "Continue for, while or until loop"), + BLTIN("echo" , builtin_echo, "Write strings to stdout"), BLTIN("eval" , builtin_eval, "Construct and run shell command"), BLTIN("exec" , builtin_exec, "Exec command, replacing this shell with the exec'd process"), BLTIN("exit" , builtin_exit, "Exit from shell"), @@ -841,6 +845,17 @@ static int builtin_test(char **argv) return test_main(argc, argv - argc); } +/* built-in 'test' handler */ +static int builtin_echo(char **argv) +{ + int argc = 0; + while (*argv) { + argc++; + argv++; + } + return bb_echo(argc, argv - argc); +} + /* built-in 'eval' handler */ static int builtin_eval(char **argv) { |