私はこの記事が書かれているのを見ました。
$ 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
コピーされたが(1980年代初頭)、POSIXは構文を指定します>|
(したがって、bashを含むすべてのPOSIXシェルと一部のシステムでshとして使用される最新のash派生がこれをサポートします)。 Zshは両方の構文をサポートしています。 Bourneシェルバリエーションには追加されていないと思いますが、間違っている可能性があります。>!
ksh