Dado
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
las conchas tienden a necesitar 2 tenedores para que esto suceda
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
excepto que ksh
heroicamente lo hace sin bifurcar una vez:
dash 2
bash 2
zsh 2
ksh 0
¿Como hace eso?
Editar:
Así es como se cae con una tubería arrojada:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Salida:
dash 11
bash 10
zsh 5
ksh 3
ksh
instalado? Cuando ejecuto su código, obtengo 0
cualquier shell que no haya instalado