19

通常のbashリダイレクト>では、標準出力をファイルにリダイレクトし、存在する場合は上書きし、標準出力をファイルに>>リダイレクトし、存在する場合は追加します。

tcsh (c シェル) スクリプトで、演算子>! >>!が使用されているのを見つけました。このオペレーターは何をしますか?tcsh には>and>>演算子もありますが、違いは何ですか?

4

2 に答える 2

38

tcsh リダイレクトでは、! 記号は、設定されていても既存のファイルを上書きすることを意味しますnoclobber

つまり、noclobber が設定されている場合:

  • cmd > fileファイルが存在しない場合、stdoutファイル書き込みます
  • cmd > fileファイルが存在する場合は失敗します
  • cmd >> fileファイルが存在する場合、ファイルに追加stdoutします
  • cmd >> fileファイルが存在しない場合は失敗します
  • cmd >! filefile に書き込みstdout、既存のファイルを上書きします
  • cmd >>! filefileに追加stdoutし、ファイルがまだ存在しない場合は作成します

が設定されていない場合noclobberは、! 効果はありません:

  • cmd > filefile に書き込みstdout、既存のファイルを上書きします
  • cmd >> fileファイルに追加stdoutます
  • cmd >! filefile に書き込みstdout、既存のファイルを上書きします
  • cmd >>! fileファイルに追加stdoutます
于 2011-07-20T13:04:07.097 に答える
3

感嘆符は、特定の場合に書き込まれるファイルのタイプのチェックを抑制します。

tcsh の man ページを引用するには:

シェル変数 noclobber が設定されている場合、そのファイルは存在してはならず、文字特殊ファイル (例えば、端末または '/dev/null') であってはなりません。さもないと、エラーが発生します。これにより、ファイルが偶発的に破壊されるのを防ぐことができます。この場合、「!」フォームを使用して、このチェックを抑制することができます。

于 2011-07-20T13:04:30.490 に答える