Dato
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
le conchiglie tendono ad avere bisogno di fare 2 forchette per farlo accadere
strace-f(){ strace -f "$@" 2>&1; };
for sh in dash bash zsh ksh; do
printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c;
done
tranne che ksh
eroicamente lo fa senza biforcarsi una volta:
dash 2
bash 2
zsh 2
ksh 0
Come lo fa?
Modificare:
Ecco come va giù con una pipa gettata dentro:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Produzione:
dash 11
bash 10
zsh 5
ksh 3
ksh
installato? Quando eseguo il codice ottengo 0
per qualsiasi shell che non ho installato