ในเชลล์คล้ายบอร์นบางตัวบิวอินread
ไม่สามารถอ่านทั้งบรรทัดจากไฟล์ใน/proc
(คำสั่งด้านล่างควรจะรันzsh
แทนที่$=shell
ด้วย$shell
เชลล์อื่น ๆ ):
$ for shell in bash dash ksh mksh yash zsh schily-sh heirloom-sh "busybox sh"; do
printf '[%s]\n' "$shell"
$=shell -c 'IFS= read x </proc/sys/fs/file-max; echo "$x"'
done
[bash]
602160
[dash]
6
[ksh]
602160
[mksh]
6
[yash]
6
[zsh]
6
[schily-sh]
602160
[heirloom-sh]
602160
[busybox sh]
6
read
มาตรฐานต้องการอินพุตมาตรฐานต้องเป็นไฟล์ข้อความข้อกำหนดนั้นเป็นสาเหตุของพฤติกรรมที่หลากหลายใช่หรือไม่
อ่านคำนิยาม POSIX ของไฟล์ข้อความฉันจะตรวจสอบบาง:
$ od -t a </proc/sys/fs/file-max
0000000 6 0 2 1 6 0 nl
0000007
$ find /proc/sys/fs -type f -name 'file-max'
/proc/sys/fs/file-max
ไม่มีNUL
ตัวละครในเนื้อหา/proc/sys/fs/file-max
และยังfind
รายงานว่าเป็นไฟล์ปกติ (นี่เป็นข้อผิดพลาดfind
หรือไม่)
ฉันเดาว่าเปลือกทำอะไรบางอย่างภายใต้ประทุนเช่นfile
:
$ file /proc/sys/fs/file-max
/proc/sys/fs/file-max: empty
strace
คำอธิบายที่เข้าใจง่ายกว่ามาก!