通常のbashリダイレクト>
では、標準出力をファイルにリダイレクトし、存在する場合は上書きし、標準出力をファイルに>>
リダイレクトし、存在する場合は追加します。
tcsh (c シェル) スクリプトで、演算子>!
>>!
が使用されているのを見つけました。このオペレーターは何をしますか?tcsh には>
and>>
演算子もありますが、違いは何ですか?
tcsh リダイレクトでは、! 記号は、設定されていても既存のファイルを上書きすることを意味しますnoclobber
。
つまり、noclobber が設定されている場合:
cmd > file
ファイルが存在しない場合、stdout
ファイルに書き込みますcmd > file
ファイルが存在する場合は失敗しますcmd >> file
ファイルが存在する場合、ファイルに追加stdout
しますcmd >> file
ファイルが存在しない場合は失敗しますcmd >! file
file に書き込みstdout
、既存のファイルを上書きしますcmd >>! file
fileに追加stdout
し、ファイルがまだ存在しない場合は作成しますが設定されていない場合noclobber
は、! 効果はありません:
cmd > file
file に書き込みstdout
、既存のファイルを上書きしますcmd >> file
ファイルに追加stdout
しますcmd >! file
file に書き込みstdout
、既存のファイルを上書きしますcmd >>! file
ファイルに追加stdout
します感嘆符は、特定の場合に書き込まれるファイルのタイプのチェックを抑制します。
tcsh の man ページを引用するには:
シェル変数 noclobber が設定されている場合、そのファイルは存在してはならず、文字特殊ファイル (例えば、端末または '/dev/null') であってはなりません。さもないと、エラーが発生します。これにより、ファイルが偶発的に破壊されるのを防ぐことができます。この場合、「!」フォームを使用して、このチェックを抑制することができます。