Wie kann ich die Bash-Option "Noclobber" überschreiben?

17

Die bash noclobberOption verhindert, dass Dateien mit Umleitung überschrieben werden. Aber manchmal möchte ich wirklich. cshhat eine ähnliche Option und kann durch Setzen eines !vor den Dateinamen überschrieben werden. Gibt es eine Möglichkeit, dies zu tun bash?

vy32
quelle

Antworten:

19

Ja. |An den Umleitungsoperator anhängen , um ein Formular zu erstellen >|. Dies finden Sie in § 3.6.2 des Bash-Referenzhandbuchs , s

Wenn der Umleitungsoperator ">" lautet und die Option "noclobber" für den eingebauten Satz aktiviert wurde, schlägt die Umleitung fehl, wenn die Datei, deren Name sich aus der Erweiterung des Wortes ergibt, existiert und eine reguläre Datei ist. Wenn der Umleitungsoperator "> |" oder der Umleitungsoperator ">" ist und die Option "noclobber" nicht aktiviert ist, wird die Umleitung versucht, auch wenn die mit "word" bezeichnete Datei vorhanden ist.

Besuchen Sie dieses Tutorial über die Noclobber-Option . Es könnte hilfreich sein.

JdeBP
quelle
3

Verwenden Sie |("pipe") in bashanstelle von !("bang") wie in csh. Beispielsweise:

echo done >| out

Beachten Sie , wenn Sie umleiten möchten stderrzu stdout und außer Kraft setzen noclobber, weder >|&noch &>|funktionieren wird; Verwenden Sie stattdessen die lange Form:

cmd-with-errors done >| out 2>&1
Turvalar
quelle
Weißt du warum err &>| outnicht funktioniert?
Sanghyun Lee