Tale reindirizzamento “|>” è solo un errore o significa qualcosa?


9

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)


1
Sei sicuro che il comando non sia nel modulo date |> tmp.txt cmd2? Perché questo cambia la risposta.
Konrad Rudolph,

Risposte:


17

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

1

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]$ 

Divertente. Zsh ha un comportamento diverso: dopo il comando, my_filecontiene l'output di date.
NI

12
@NajibIdrissi, in 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 .
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.