Bash: cosa fa "> |"?


148

Ho appena visto questo scritto;

$ some-command >| /tmp/output.txt

I tubi verticali vengono utilizzati nei reindirizzamenti standard "piping" l'output di un comando verso un altro, è >|infatti completamente inutile in quanto sarebbe lo stesso >di questo scenario?



Risposte:


220

Non è inutile: è una forma specializzata >dell'operatore di reindirizzamento semplice (e, forse confusamente, nulla a che fare con le pipe). bashe molte altre shell moderne hanno un'opzione noclobberche impedisce al reindirizzamento di sovrascrivere o distruggere un file già esistente. Ad esempio, se noclobberè vero e il file /tmp/output.txtesiste già, ciò dovrebbe fallire:

$ some-command > /tmp/output.txt

Tuttavia, è possibile ignorare esplicitamente l'impostazione di noclobbercon l' >|operatore di reindirizzamento: il reindirizzamento funzionerà, anche se noclobberimpostato.

Puoi scoprire se noclobberè impostato nel tuo ambiente attuale con set -o.

Per la nota storica, provengono sia l'opzione "noclobber" che le sue caratteristiche di bypass csh(fine anni '70). kshcopiato (primi anni '80) ma usato al >|posto di >!. POSIX ha specificato la kshsintassi (quindi tutte le shell POSIX tra cui bash, i nuovi derivati ​​di cenere usati come sh su alcuni sistemi lo supportano). Zsh supporta entrambe le sintassi. Non penso che sia stato aggiunto a nessuna variante della shell Bourne, ma potrei sbagliarmi.


3
@sch - re la tua nota storica (grazie per le informazioni extra, a proposito) - FreeBSD shha noclobber, da circa maggio 2002.
D_Bye
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.