Trong một số Bourne giống như vỏ, các read
BUILTIN 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ế $=shell
với $shell
vớ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
read
tiê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ó NUL
ký tự nào trong nội dung /proc/sys/fs/file-max
và cũng find
báo cáo đây là một tệp thông thường (Đây có phải là lỗi trong find
khô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
strace
lời giải thích dựa trên dễ hiểu hơn nhiều!