sort "$f1"
Fehler für Werte $f1
, die mit -
oder hier beginnen, für sort
einige, die mit beginnen +
(kann schwerwiegende Konsequenzen für eine beispielsweise aufgerufene Datei haben -o/etc/passwd
).
sort -- "$f1"
(wobei --
das Ende der Optionen signalisiert wird) behebt die meisten dieser Probleme, schlägt jedoch für die aufgerufene Datei immer noch fehl -
(was so sort
interpretiert wird, dass sie stattdessen die Standardeingabe enthält).
sort < "$f1"
Hat diese Probleme nicht.
Hier ist es die Shell, die die Datei öffnet. Dies bedeutet auch, dass, wenn die Datei nicht geöffnet werden kann, eine möglicherweise nützlichere Fehlermeldung angezeigt wird (z. B. geben die meisten Shells die Zeilennummer im Skript an) und die Fehlermeldung bei Verwendung konsistent ist Umleitungen, wo immer möglich, um Dateien zu öffnen.
Und in
sort < "$f1" > out
(im Gegensatz zu sort -- "$f1" > out
), wenn "$f1"
nicht geöffnet werden kann, out
wird nicht erstellt / abgeschnitten und sort
nicht einmal ausgeführt.
Um eine mögliche Verwirrung zu beseitigen (siehe nachfolgende Kommentare), wird der Befehl nicht daran gehindert, die Datei zu öffnen mmap()
oder sich in der Datei zu befinden lseek()
(dies sort
gilt auch nicht), vorausgesetzt, die Datei selbst ist suchbar. Der einzige Unterschied besteht darin, dass die Datei von der Shell früher und im Dateideskriptor 0 geöffnet wird, während der Befehl später möglicherweise einen anderen Dateideskriptor verwendet. Der Befehl kann immer noch nach / mmap suchen, das fd 0, wie es gefällt. Das darf nicht verwechselt werden, wenn der Standard cat file | cmd
dieses Mal cmd
eine Pfeife ist, die nicht gemappt / gesucht werden kann.