Dado
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
conchas tendem a precisar fazer 2 garfos para que isso aconteça
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
exceto ksh
heroicamente faz isso sem bifurcar uma vez:
dash 2
bash 2
zsh 2
ksh 0
Como isso acontece?
Editar:
Aqui está como ele desce com um cano lançado:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Resultado:
dash 11
bash 10
zsh 5
ksh 3
ksh
instalou? Quando executo seu código, obtenho 0
qualquer shell que não tenha instalado