In einigen Bourne-wie Muscheln, die read
kann builtin nicht die ganze Zeile aus der Datei eingelesen /proc
(der Befehl unten ausgeführt werden sollte zsh
, ersetzen Sie $=shell
mit $shell
anderen Shells):
$ 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 erfordert, dass die Standardeingabe eine Textdatei sein muss. Verursacht diese Anforderung das abwechslungsreiche Verhalten?
Lesen Sie die POSIX-Definition der Textdatei , ich mache eine Überprüfung:
$ 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
Es gibt kein NUL
Zeichen im Inhalt von /proc/sys/fs/file-max
und find
es wird auch als reguläre Datei gemeldet (Ist dies ein Fehler in find
?).
Ich denke, die Muschel hat etwas unter der Haube gemacht, wie file
:
$ file /proc/sys/fs/file-max
/proc/sys/fs/file-max: empty
strace
Erklärung auf der Grundlage von ist viel einfacher zu verstehen!