Process substitution is a Korn shell feature that's also available
in bash and some other shells. This patch implements process
substitution in ash when ASH_BASH_COMPAT is enabled.
function old new delta
argstr 1386 1522 +136
strtodest - 52 +52
readtoken1 3346 3392 +46
.rodata 183206 183250 +44
unwindredir - 28 +28
cmdloop 365 372 +7
static.spclchars 10 12 +2
cmdputs 380 367 -13
exitreset 86 69 -17
evalcommand 1754 1737 -17
varvalue 675 634 -41
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 5/4 up/down: 315/-88) Total: 227 bytes
text data bss dec hex filename
953967 4219 1904 960090 ea65a busybox_old
954192 4219 1904 960315 ea73b busybox_unstripped
v2: Replace array of file descriptors with a linked list.
Include tests that were unaccountably omitted from v1.
v3: Update linked list code to the intended version.
v4: Change order of conditional code in cmdputs().
v5: Use existing popredir() mechanism to manage file descriptors.
v6: Rebase to latest version of BusyBox ash. Reduce code churn.
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
34 lines
723 B
Bash
Executable File
34 lines
723 B
Bash
Executable File
# simplest case
|
|
cat <(echo "hello 1")
|
|
|
|
# can have more than one
|
|
cat <(echo "hello 2") <(echo "hello 3")
|
|
|
|
# doesn't work in quotes
|
|
echo "<(echo \"hello 0\")"
|
|
|
|
# process substitution can be nested inside command substitution
|
|
echo $(cat <(echo "hello 4"))
|
|
|
|
# example from http://wiki.bash-hackers.org/syntax/expansion/proc_subst
|
|
# process substitutions can be passed to a function as parameters or
|
|
# variables
|
|
f() {
|
|
cat "$1" >"$x"
|
|
}
|
|
x=>(tr '[:lower:]' '[:upper:]') f <(echo 'hi there')
|
|
|
|
# process substitution can be combined with redirection on exec
|
|
rm -f err
|
|
# save stderr
|
|
exec 4>&2
|
|
# copy stderr to a file
|
|
exec 2> >(tee err)
|
|
echo "hello error" >&2
|
|
sync
|
|
# restore stderr
|
|
exec 2>&4
|
|
cat err
|
|
rm -f err
|
|
echo "hello stderr" >&2
|