Ist eine solche Umleitung "|>" nur ein Fehler oder bedeutet sie etwas?

9

Ich habe es versehentlich eingegeben, aber bash hat keine Fehler gedruckt (sondern eine leere Datei erstellt), also dachte ich, dass es vielleicht tatsächlich etwas bedeutet? (zB Datum |> tmp.txt)

Bdimych2 Bdimych2
quelle
1
Sind Sie sicher, dass der Befehl nicht die Form hat date |> tmp.txt cmd2? Weil das die Antwort ändert.
Konrad Rudolph

Antworten:

17

Dies scheint nur eine Pipeline zu sein, bei der der zweite Teil ein leerer Befehl ist, der nur die Umleitung enthält. Schreiben, date | >fileum die Interpretation zu erleichtern. Der leere Befehl verarbeitet nur die Umleitung und erstellt die Datei.

date >| fileAuf der anderen Seite würde dies als Überschreibung für die noclobberShell-Option fungieren , wodurch verhindert wird, dass der Regular >vorhandene Dateien überschreibt.

$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo       # works
ilkkachu
quelle
1

Ja, es wird kein Fehler ausgegeben > file, da Bash bedeutet, in eine Datei mit dem Namen umzuleiten file. Da in Ihrem Fall nichts in die Datei umgeleitet werden muss, erstellt bash lediglich einen Dateinamen, filein dem sich nichts befindet.

[bd@centos-6.5 my-tests]$ date | > my_file
[bd@centos-6.5 my-tests]$ cat my_file
[bd@centos-6.5 my-tests]$ 
Bhagyesh Dudhediya
quelle
Lustig. Zsh hat ein anderes Verhalten: my_fileEnthält nach dem Befehl die Ausgabe von date.
NI
12
@NajibIdrissi, in zsh, wenn es nur Umleitungen und kein Befehl ist, zshwird mit dem $NULLCMDBefehl ( catvoreingestellt) oder $READNULLCMD(a - Pager Standardeinstellung) wenn es nur Eingang Umleitungen.
Stéphane Chazelas