Em alguns Bourne-como conchas, o read
embutida não pode ler toda a linha a partir do arquivo em /proc
(o comando a seguir devem ser executados em zsh
, substitua $=shell
com $shell
com outras conchas):
$ 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
padrão exige que a entrada padrão precise ser um arquivo de texto ; esse requisito causa comportamentos variados?
Leia a definição POSIX do arquivo de texto , faço algumas verificações:
$ 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
Não há NUL
caractere no conteúdo de /proc/sys/fs/file-max
, e também o find
relatou como um arquivo regular (isso é um bug find
?).
Eu acho que a concha fez algo sob o capô, como file
:
$ file /proc/sys/fs/file-max
/proc/sys/fs/file-max: empty
strace
explicação baseada em é muito mais fácil de entender!