Данный
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
снаряды, как правило, должны сделать 2 вилки, чтобы это произошло
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
кроме ksh
героически делает это, не разветвившись
dash 2
bash 2
zsh 2
ksh 0
Как оно это делает?
Редактировать:
Вот как это происходит с добавленной трубой:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Выход:
dash 11
bash 10
zsh 5
ksh 3
ksh
установили? Когда я запускаю твой код, я получаю 0
любую оболочку, которую я не установил