いくつかのボーンのようなシェルでは、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
standardでは、標準入力がテキストファイルである必要がありますが、その要件はさまざまな動作を引き起こしますか?
$ 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
ベースの説明ははるかに理解しやすいです!