バッシュ:「>|」とはどういう意味ですか?

バッシュ:「>|」とはどういう意味ですか?

私はこの記事が書かれているのを見ました。

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

あるコマンドの出力を別のコマンドに「パイプ」するために標準リダイレクトに使用される垂直パイプは、この>|場合と同じであるため、実際にはまったく役に立ちません>

答え1

それは役に立たない。これは>一般的なリダイレクト演算子の特別な形です(そしておそらく混乱してもパイプとは何の関係もありません)。他のほとんどの最新のシェルには、リダイレクトが既存のファイルを上書きまたは破損するのを防ぐbashオプションがあります。noclobberたとえば、noclobbertrue でファイルが/tmp/output.txtすでに存在する場合は失敗します。

$ some-command > /tmp/output.txt

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

noclobber現在の環境に設定されていることを確認するために使用できますset -o

記録によると、「noclobber」オプションとそのバイパス機能はcsh70年代後半から使用されました。kshコピーされたが(1980年代初頭)、POSIXは構文を指定します>|(したがって、bashを含むすべてのPOSIXシェルと一部のシステムでshとして使用される最新のash派生がこれをサポートします)。 Zshは両方の構文をサポートしています。 Bourneシェルバリエーションには追加されていないと思いますが、間違っている可能性があります。>!ksh

関連情報