Bash: Was macht "> |"?

148

Ich habe gerade gesehen, wie das aufgeschrieben wurde.

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

Vertikale Pipes werden in Standard-Redirects verwendet, um die Ausgabe eines Befehls an einen anderen zu "leiten". Ist dies >|in der Tat völlig nutzlos, wie es auch >in diesem Szenario der Fall wäre ?

jwbensley
quelle
Für den Rest des Bildes empfehle ich dringend Was sind die Steuerungs- und Umleitungsoperatoren der Shell?
Wildcard

Antworten:

220

Es ist nicht nutzlos - es ist eine spezielle Form des einfachen >Umleitungsoperators (und vielleicht verwirrend, nichts mit Pipes zu tun). bashund die meisten anderen modernen Shells haben eine Option noclobber, die verhindert, dass die Umleitung eine bereits vorhandene Datei überschreibt oder zerstört. Wenn beispielsweise noclobbertrue ist und die Datei /tmp/output.txtbereits vorhanden ist, sollte dies fehlschlagen:

$ some-command > /tmp/output.txt

Sie können die Einstellung von jedoch explizit noclobbermit dem >|Umleitungsoperator überschreiben - die Umleitung funktioniert, auch wenn festgelegt noclobberist.

Mit können Sie herausfinden, ob noclobberin Ihrer aktuellen Umgebung eingestellt ist set -o.

Aus historischer Sicht stammen sowohl die "Noclobber" -Option als auch deren Bypass-Funktionen aus den cshspäten 70er Jahren. kshkopiert (Anfang der 80er Jahre), aber >|stattdessen verwendet >!. POSIX hat die kshSyntax angegeben (daher unterstützen alle POSIX-Shells, einschließlich Bash, neuere Aschederivate, die auf einigen Systemen als sh verwendet werden, diese Syntax). Zsh unterstützt beide Syntaxen. Ich glaube nicht, dass es zu einer Bourne-Shell-Variante hinzugefügt wurde, aber ich könnte mich irren.

D_Bye
quelle
3
@sch - re deine historische Notiz (danke für die zusätzlichen Informationen, übrigens) - FreeBSD shhat noclobberseit ungefähr Mai 2002.
D_Bye