Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/shell/README
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/shell/README
r1765 r2725 1 Various bits of what is known about busybox shells, in no particular order. 1 http://www.opengroup.org/onlinepubs/9699919799/ 2 Open Group Base Specifications Issue 7 2 3 3 2007-06-134 hush: exec <"$1" doesn't do parameter subst5 4 6 2007-05-24 7 hush: environment-related memory leak plugged, with net code size 8 decrease. 5 http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html 6 Shell & Utilities 9 7 10 2007-05-24 11 hush: '( echo ${name )' will show syntax error message, but prompt 12 doesn't return (need to press <enter>). Pressing Ctrl-C, <enter>, 13 '( echo ${name )' again, Ctrl-C segfaults. 8 It says that any of the standard utilities may be implemented 9 as a regular shell built-in. It gives a list of utilities which 10 are usually implemented that way (and some of them can only 11 be implemented as built-ins, like "alias"): 14 12 15 2007-05-21 16 hush: environment cannot be handled by libc routines as they are leaky 17 (by API design and thus unfixable): hush will leak memory in this script, 18 bash does not: 19 pid=$$ 20 while true; do 21 unset t; 22 t=111111111111111111111111111111111111111111111111111111111111111111111111 23 export t 24 ps -o vsz,pid,comm | grep " $pid " 25 done 26 The fix is to not use setenv/putenv/unsetenv but manipulate env ourself. TODO. 27 hush: meanwhile, first three command subst bugs mentioned below are fixed. :) 13 alias 14 bg 15 cd 16 command 17 false 18 fc 19 fg 20 getopts 21 jobs 22 kill 23 newgrp 24 pwd 25 read 26 true 27 umask 28 unalias 29 wait 28 30 29 2007-05-0630 hush: more bugs spotted. Comparison with bash:31 bash-3.2# echo "TEST`date;echo;echo`BEST"32 TESTSun May 6 09:21:05 CEST 2007BEST [we dont strip eols]33 bash-3.2# echo "TEST`echo '$(echo ZZ)'`BEST"34 TEST$(echo ZZ)BEST [we execute inner echo]35 bash-3.2# echo "TEST`echo "'"`BEST"36 TEST'BEST [we totally mess up this one]37 bash-3.2# echo `sleep 5`38 [Ctrl-C should work, Ctrl-Z should do nothing][we totally mess up this one]39 bash-3.2# if true; then40 > [Ctrl-C]41 bash-3.2# [we re-issue "> "]42 bash-3.2# if echo `sleep 5`; then43 > true; fi [we execute sleep before "> "]44 31 45 2007-05-04 46 hush: made ctrl-Z/C work correctly for "while true; do true; done" 47 (namely, it backgrounds/interrupts entire "while") 32 http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html 33 Shell Command Language 48 34 49 2007-05-03 50 hush: new bug spotted: Ctrl-C on "while true; do true; done" doesn't 51 work right: 52 # while true; do true; done 53 [1] 0 true <-- pressing Ctrl-C several times... 54 [2] 0 true 55 [3] 0 true 56 Segmentation fault 35 It says that shell must implement special built-ins. Special built-ins 36 differ from regular ones by the fact that variable assignments 37 done on special builtin are *PRESERVED*. That is, 57 38 58 2007-05-03 59 hush: update on "sleep 1 | exit 3; echo $?" bug. 60 parse_stream_outer() repeatedly calls parse_stream(). 61 parse_stream() is now fixed to stop on ';' in this example, 62 fixing it (parse_stream_outer() will call parse_stream() 1st time, 63 execute the parse tree, call parse_stream() 2nd time and execute the tree). 64 But it's not the end of story. 65 In more complex situations we _must_ parse way farther before executing. 66 Example #2: "{ sleep 1 | exit 3; echo $?; ...few_lines... } >file". 67 Because of redirection, we cannot execute 1st pipe before we parse it all. 68 We probably need to learn to store $var expressions in parse tree. 69 Debug printing of parse tree would be nice too. 39 VAR=VAL special_builtin; echo $VAR 70 40 71 2007-04-28 72 hush: Ctrl-C and Ctrl-Z for single NOFORK commands are working. 73 Memory and other resource leaks (opendir) are not addressed 74 (testcase is "rm -i" interrupted by ctrl-c). 41 should print VAL. 75 42 76 2007-04-21 77 hush: "sleep 5 | sleep 6" + Ctrl-Z + fg seems to work. 78 "rm -i" + Ctrl-C, "sleep 5" + Ctrl-Z still doesn't work 79 for SH_STANDALONE case :( 43 (Another distinction is that an error in special built-in should 44 abort the shell, but this is not such a critical difference, 45 and moreover, at least bash's "set" does not follow this rule, 46 which is even codified in autoconf configure logic now...) 80 47 81 2007-04-21 82 hush: fixed non-backgrounding of "sleep 1 &" and totally broken 83 "sleep 1 | sleep 2 &". Noticed a bug where successive jobs 84 get numbers 1,2,3 even when job #1 has exited before job# 2 is started. 85 (bash reuses #1 in this case) 48 List of special builtins: 86 49 87 2007-04-21 88 hush: "sleep 1 | exit 3; echo $?" prints 0 because $? is substituted 89 _before_ pipe gets executed!! run_list_real() already has "pipe;echo" 90 parsed and handed to it for execution, so it sees "pipe"; "echo 0". 50 . file 51 : [argument...] 52 break [n] 53 continue [n] 54 eval [argument...] 55 exec [command [argument...]] 56 exit [n] 57 export name[=word]... 58 export -p 59 readonly name[=word]... 60 readonly -p 61 return [n] 62 set [-abCefhmnuvx] [-o option] [argument...] 63 set [+abCefhmnuvx] [+o option] [argument...] 64 set -- [argument...] 65 set -o 66 set +o 67 shift [n] 68 times 69 trap n [condition...] 70 trap [action condition...] 71 unset [-fv] name... 91 72 92 2007-04-21 93 hush: removed setsid() and made job control sort-of-sometimes-work. 94 Ctrl-C in "rm -i" works now except for SH_STANDALONE case. 95 "sleep 1 | exit 3" + "echo $?" works, "sleep 1 | exit 3; echo $?" 96 shows exitcode 0 (should be 3). "sleep 1 | sleep 2 &" fails horribly. 73 In practice, no one uses this obscure feature - none of these builtins 74 gives any special reasons to play such dirty tricks. 97 75 98 2007-04-14 99 lash, hush: both do setsid() and as a result don't have ctty! 100 Ctrl-C doesn't work for any child (try rm -i), etc... 101 lash: bare ">file" doesn't create a file (hush works) 76 However. This section also says that *function invocation* should act 77 similar to special built-in. That is, variable assignments 78 done on function invocation should be preserved after function invocation. 79 80 This is significant: it is not unthinkable to want to run a function 81 with some variables set to special values. But because of the above, 82 it does not work: variable will "leak" out of the function.
Note:
See TracChangeset
for help on using the changeset viewer.