Various bits of what is known about busybox shells, in no particular order.
+2007-11-23
+hush: fixed bogus glob handling; fixed exec <"$1"; added test and echo builtins
+
2007-06-13
hush: exec <"$1" doesn't do parameter subst
continue;
}
if (redir->dup == -1) {
+ char *p;
mode = redir_table[redir->type].mode;
- openfd = open_or_warn(redir->glob_word[0], mode);
+ p = expand_string_to_string(redir->glob_word[0]);
+ openfd = open_or_warn(p, mode);
+ free(p);
if (openfd < 0) {
/* this could get lost if stderr has been redirected, but
bash and ash both lose it as well (though zsh doesn't!) */
}
} else
/* If or_mask is nonzero, we handle assignment 'a=....$@.....'
- * and in this case should theat it like '$*' */
+ * and in this case should treat it like '$*' - see 'else...' below */
if (first_ch == ('@'|0x80) && !or_mask) { /* quoted $@ */
while (1) {
strcpy(pos, global_argv[i]);
list[n++] = pos;
}
} else { /* quoted $*: add as one word */
- while (1) {
+ if (global_argv[i]) while (1) {
strcpy(pos, global_argv[i]);
pos += strlen(global_argv[i]);
- if (++i >= global_argc)
+ if (!global_argv[++i])
break;
if (ifs[0])
*pos++ = ifs[0];
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" "$0" abc "d e"
+fi
+
+echo TEST1 >"$1.out"
+echo TEST2 >"$2.out"
+# bash says: "$@.out": ambiguous redirect
+# ash handles it as if it is '$*' - we do the same
+echo TEST3 >"$@.out"
+
+cat abc.out "d e.out" "abc d e.out"
+
+rm abc.out "d e.out" "abc d e.out"