Donné
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
les coquilles ont tendance à avoir besoin de 2 fourchettes pour y arriver
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
sauf ksh
qu'il le fait héroïquement sans bifurquer une fois:
dash 2
bash 2
zsh 2
ksh 0
Comment ça fait ça?
Éditer:
Voici comment ça se passe avec un tuyau jeté:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Production:
dash 11
bash 10
zsh 5
ksh 3
ksh
installé? Lorsque j'exécute votre code, je reçois 0
pour n'importe quel shell que je n'ai pas installé