Дано
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
будь-яку оболонку, яку я не встановив