it-swarm.com.de

Bash: Was bedeutet "> |" tun?

Ich habe gerade gesehen, wie dies aufgeschrieben wurde.

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

Vertikale Pipes werden in Standardumleitungen verwendet. "Piping" Die Ausgabe eines Befehls an einen anderen lautet >| in der Tat völlig nutzlos, da es das gleiche wäre wie nur > In diesem Szenario?

152
jwbensley

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

$ some-command > /tmp/output.txt

Sie können die Einstellung von noclobber jedoch explizit mit dem Umleitungsoperator >| Überschreiben - die Umleitung funktioniert auch dann, wenn noclobber festgelegt ist.

Mit set -o Können Sie herausfinden, ob noclobber in Ihrer aktuellen Umgebung festgelegt ist.

Für die historische Anmerkung stammen sowohl die "Noclobber" -Option als auch ihre Bypass-Funktionen aus csh (Ende der 70er Jahre). ksh hat es kopiert (Anfang der 80er Jahre), aber >| anstelle von >! verwendet. POSIX hat die Syntax ksh angegeben (daher unterstützen alle POSIX-Shells, einschließlich Bash, neuere Aschederivate, die auf einigen Systemen als sh verwendet werden, diese). Zsh unterstützt beide Syntaxen. Ich glaube nicht, dass es zu einer Bourne Shell-Variante hinzugefügt wurde, aber ich könnte mich irren.

229
D_Bye