私はこれが書き留められたのを見たところです。
$ some-command >| /tmp/output.txt
垂直パイプは、1つのコマンドの出力を別のコマンドに「パイプ」する標準のリダイレクトで使用されます。>|
は、このシナリオでは>
と同じであるため、実際にはまったく役に立ちませんか?
それは役に立たないわけではありません-それはプレーンな>
リダイレクト演算子の特殊な形式です(そして、おそらく混乱を招くかもしれませんが、パイプとは関係ありません)。 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 Shellバリアントには追加されていないと思いますが、私は間違っているかもしれません。