Trong một số Bourne giống như vỏ, các readBUILTIN không thể đọc được toàn bộ dòng từ tập tin trong /proc(lệnh dưới đây sẽ được chạy trong zsh, thay thế $=shellvới $shellvới vỏ khác):
$ 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
readtiêu chuẩn yêu cầu đầu vào tiêu chuẩn cần phải là một tệp văn bản , yêu cầu đó có gây ra các hành vi khác nhau không?
Đọc định nghĩa POSIX của tệp văn bản , tôi thực hiện một số xác minh:
$ 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
Không có NULký tự nào trong nội dung /proc/sys/fs/file-maxvà cũng findbáo cáo đây là một tệp thông thường (Đây có phải là lỗi trong findkhông?).
Tôi đoán cái vỏ đã làm một cái gì đó dưới mui xe, như file:
$ file /proc/sys/fs/file-max
/proc/sys/fs/file-max: empty
stracelời giải thích dựa trên dễ hiểu hơn nhiều!