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)
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)
Antworten:
Dies scheint nur eine Pipeline zu sein, bei der der zweite Teil ein leerer Befehl ist, der nur die Umleitung enthält. Schreiben, date | >file
um die Interpretation zu erleichtern. Der leere Befehl verarbeitet nur die Umleitung und erstellt die Datei.
date >| file
Auf der anderen Seite würde dies als Überschreibung für die noclobber
Shell-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
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, file
in 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]$
my_file
Enthält nach dem Befehl die Ausgabe von date
.
zsh
, wenn es nur Umleitungen und kein Befehl ist, zsh
wird mit dem $NULLCMD
Befehl ( cat
voreingestellt) oder $READNULLCMD
(a - Pager Standardeinstellung) wenn es nur Eingang Umleitungen.
date |> tmp.txt cmd2
? Weil das die Antwort ändert.