Major changes:
- Symbols "'`*\?&|; etc. are correctly escaped before eval'ed.
As a result all these symbols are allowed in commands.
For example,
# the following command outputs ''??????{}!&| --- ??????{}!&|'''
runpipe_base \
awk 'BEGIN {print "+*<>(){}!&|"; exit 41}' '|' \
sed 's,[+*<>()],?,g' '|' \
awk '{print $0 " --- " $0; exit 43}' '|' \
awk "{print \"''\" \$0 \"'''\"; exit 44}"
echo "$pipestatus_all" # '41 0 43 44'
echo "$pipestatus_1" # '41'
echo "$pipestatus_2" # '0'
echo "$pipestatus_3" # '43'
echo "$pipestatus_4" # '44'
echo "$pipesize" # '4'
Regresion test for this case.
- Support for shitty Solaris /bin/sh
$(()) is replaced with expr(1),
$() -- with ``,
for i -- with for i in "$@"
- Makefile: new target "test_all" for testing all available shells