दिया हुआ
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
हूं तो मुझे किसी भी शेल के लिए मिलता है जिसे मैंने स्थापित नहीं किया है