Gegeben
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
Muscheln müssen in der Regel zwei Gabeln bilden, um dies zu erreichen
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
außer ksh
heroisch macht es ohne einmal zu gabeln:
dash 2
bash 2
zsh 2
ksh 0
Wie macht es das?
Bearbeiten:
Hier ist, wie es mit einer eingeworfenen Pfeife weitergeht:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Ausgabe:
dash 11
bash 10
zsh 5
ksh 3
ksh
eine Sicherheitsüberprüfung installiert? Wenn ich Ihren Code ausführe, erhalte ich 0
für jede Shell, die ich nicht installiert habe