Denys Vlasenko 8e38108d03 ash: fix open fds leaking in redirects. Closes 9561 8 năm trước cách đây
..
ash_test 8e38108d03 ash: fix open fds leaking in redirects. Closes 9561 8 năm trước cách đây
hush_test 8e38108d03 ash: fix open fds leaking in redirects. Closes 9561 8 năm trước cách đây
Config.src 28251dfa64 Make it possible to select "sh" and "bash" aliases without selecting ash or hush 8 năm trước cách đây
Kbuild.src 28251dfa64 Make it possible to select "sh" and "bash" aliases without selecting ash or hush 8 năm trước cách đây
README 131ed3bcc9 update shell/README 14 năm trước cách đây
README.job 5f786c24e4 hush: small code shrink; style fixes 17 năm trước cách đây
ash.c 8e38108d03 ash: fix open fds leaking in redirects. Closes 9561 8 năm trước cách đây
ash_doc.txt b21f379639 ash: fix TRACE commands 15 năm trước cách đây
ash_ptr_hack.c 0ef64bdb40 *: make GNU licensing statement forms more regular 14 năm trước cách đây
brace.txt 647553a4fc hush: wait for `cmd` to complete, and immediately store its exitcode in $? 15 năm trước cách đây
cttyhack.c 6e9d047c15 cttyhack: handle multiple consoles found in sysfs 13 năm trước cách đây
hush.c 9c806db4b7 hush: correct exitcode for unterminated ')' - exitcode2.tests testcase 8 năm trước cách đây
hush_doc.txt bcb25537d0 hush: implement break and continue 16 năm trước cách đây
hush_leaktool.sh dcd78c4d0f hush: fix "export not_yet_defined_var", fix parsing of "cmd | }" 15 năm trước cách đây
match.c 2d8187c139 shell/match.c: shrink by dropping double bool inversion 14 năm trước cách đây
match.h 701e127f7d hush: optimize #[#] and %[%] for speed. size -2 bytes. 14 năm trước cách đây
math.c f5add44981 typo fix in comment 10 năm trước cách đây
math.h 28251dfa64 Make it possible to select "sh" and "bash" aliases without selecting ash or hush 8 năm trước cách đây
random.c ac03a40cba ash,hush: fix a thinko about 2^64-1 factorization 10 năm trước cách đây
random.h fb183076a3 ash,hush: improve randomness of $RANDOM, add easy-ish way to test it 10 năm trước cách đây
shell_common.c e627ac95be ash: [VAR] Initialise OPTIND after importing environment 8 năm trước cách đây
shell_common.h e627ac95be ash: [VAR] Initialise OPTIND after importing environment 8 năm trước cách đây

README

http://www.opengroup.org/onlinepubs/9699919799/
Open Group Base Specifications Issue 7


http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html
Shell & Utilities

It says that any of the standard utilities may be implemented
as a regular shell built-in. It gives a list of utilities which
are usually implemented that way (and some of them can only
be implemented as built-ins, like "alias"):

alias
bg
cd
command
false
fc
fg
getopts
jobs
kill
newgrp
pwd
read
true
umask
unalias
wait


http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
Shell Command Language

It says that shell must implement special built-ins. Special built-ins
differ from regular ones by the fact that variable assignments
done on special builtin are *PRESERVED*. That is,

VAR=VAL special_builtin; echo $VAR

should print VAL.

(Another distinction is that an error in special built-in should
abort the shell, but this is not such a critical difference,
and moreover, at least bash's "set" does not follow this rule,
which is even codified in autoconf configure logic now...)

List of special builtins:

. file
: [argument...]
break [n]
continue [n]
eval [argument...]
exec [command [argument...]]
exit [n]
export name[=word]...
export -p
readonly name[=word]...
readonly -p
return [n]
set [-abCefhmnuvx] [-o option] [argument...]
set [+abCefhmnuvx] [+o option] [argument...]
set -- [argument...]
set -o
set +o
shift [n]
times
trap n [condition...]
trap [action condition...]
unset [-fv] name...

In practice, no one uses this obscure feature - none of these builtins
gives any special reasons to play such dirty tricks.

However. This section also says that *function invocation* should act
similar to special built-in. That is, variable assignments
done on function invocation should be preserved after function invocation.

This is significant: it is not unthinkable to want to run a function
with some variables set to special values. But because of the above,
it does not work: variable will "leak" out of the function.