Für einen Befehl, wenn -
verwendet wird als Argument anstelle eines Dateinamens bedeutet STDIN oder STDOUT.
-
Aber in diesem Beispiel wird eine Datei mit dem Namen
-
erstellt :echo hello > -
Wie kann ich
-
machen in diesem Beispiel STDOUT? -
Umgekehrt, wie kann ich
-
machen bedeutet eine Datei namens-
in Beispielen wie:cat -
Akzeptierte Antwort:
Mit -
als Dateiname stdin/stdout zu bedeuten, ist eine Konvention, die viele Programme verwenden. Es ist keine besondere Eigenschaft des Dateinamens. Der Kernel erkennt -
nicht ebenso besonders alle Systemaufrufe, die sich auf -
beziehen als Dateiname wird -
verwendet wörtlich als Dateiname.
Mit Bash-Umleitung -
wird nicht als spezieller Dateiname erkannt, daher verwendet Bash diesen als wörtlichen Dateinamen.
Wenn cat
sieht die Zeichenkette -
als Dateiname wird er als Synonym für stdin behandelt. Um dies zu umgehen, müssen Sie die Zeichenfolge cat
ändern sieht so, dass es immer noch auf eine Datei namens -
verweist . Üblicherweise wird dem Dateinamen ein Pfad vorangestellt – ./-
, oder /home/Tim/-
. Diese Technik wird auch verwendet, um ähnliche Probleme zu umgehen, bei denen Befehlszeilenoptionen mit Dateinamen kollidieren, also eine Datei, die als ./-e
bezeichnet wird erscheint nicht als -e
Befehlszeilenoption für ein Programm, zum Beispiel.