ป.ร. ให้ไว้
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
เปลือกใด ๆ ฉันไม่ได้ติดตั้ง