Bash:「> |」は何をしますか?


148

これを書き留めたところを見ました。

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

垂直パイプは、1つのコマンドの出力を別のコマンドに「パイピング」する標準リダイレクトで使用されますが、このシナリオの>|場合と同じように、実際にはまったく役に立ちませ>んか?



回答:


220

役に立たないわけではありません-単純な>リダイレクト演算子の特殊な形式です(そして、おそらく混乱を招きますが、パイプとは無関係です)。bashまた、他のほとんどの最新のシェルには、noclobberリダイレクトが既存のファイルを上書きまたは破壊しないようにするオプションがあります。たとえば、noclobberがtrueで、ファイルが/tmp/output.txt既に存在する場合、これは失敗するはずです。

$ some-command > /tmp/output.txt

ただし、リダイレクト演算子を使用noclobberして明示的にの設定をオーバーライドできます>|-リダイレクトnoclobberが設定されていても機能します。

noclobber現在の環境に設定されているかどうかを確認できますset -o

歴史的な注記として、「noclobber」オプションとそのバイパス機能は両方ともcsh(70年代後半)に由来しています。ksh(80年代前半)をコピーしましたが、の>|代わりに使用しました>!。POSIXはksh構文を指定しました(そのため、bashを含むすべてのPOSIXシェル、一部のシステムでshとして使用される新しいash派生物がサポートしています)。Zshは両方の構文をサポートしています。Bourneシェルバリアントに追加されたとは思いませんが、間違っている可能性があります。


3
@sch-あなたの歴史的なメモを再度(追加情報のおかげで、btw)- 2002shnoclobber
。– D_Bye
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.