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 | >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
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]$
my_fileEnthält nach dem Befehl die Ausgabe von date.
zsh, wenn es nur Umleitungen und kein Befehl ist, zshwird mit dem $NULLCMDBefehl ( catvoreingestellt) oder $READNULLCMD(a - Pager Standardeinstellung) wenn es nur Eingang Umleitungen.
date |> tmp.txt cmd2? Weil das die Antwort ändert.