L'ho digitato per errore ma bash non ha stampato alcun errore (ma ha creato un file vuoto) quindi ho pensato che forse in realtà significa qualcosa? (ad es. data |> tmp.txt)
L'ho digitato per errore ma bash non ha stampato alcun errore (ma ha creato un file vuoto) quindi ho pensato che forse in realtà significa qualcosa? (ad es. data |> tmp.txt)
Risposte:
Sembra che sia solo una pipeline in cui la seconda parte è un comando vuoto, contenente solo il reindirizzamento. Scriverlo come date | >filepotrebbe facilitare l'interpretazione. Il comando vuoto non fa altro che elaborare il reindirizzamento, creando il file.
date >| filed'altra parte fungerebbe da override per l' noclobberopzione shell, che impedisce al normale >di sovrascrivere i file esistenti.
$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo # works
Sì, non genererà errori perché per bash > filesignifica reindirizzare a un file denominato file. Come nel tuo caso non c'è nulla da reindirizzare al file, bash creerà semplicemente un nome di file filesenza nulla al suo interno.
[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_filecontiene l'output di date.
zsh, quando sono presenti solo reindirizzamenti e nessun comando, zshesegue il $NULLCMDcomando ( catper impostazione predefinita) o $READNULLCMD(un cercapersone per impostazione predefinita) se sono presenti solo reindirizzamenti di input .
date |> tmp.txt cmd2? Perché questo cambia la risposta.