回答:
* nixパイプがどのように機能するかを少し理解すると役立ちます。
要するに、>>
リダイレクト演算子は指定されたファイルの最後に行を追加>
します。単一の「より大きい」は空になり、ファイルを上書きします。
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
。
>
および>>
は出力リダイレクト演算子です。パイプ演算子は|
です。
>|
既存の上書きを強制する
Bashでは、noclobber a laを設定しset -o noclobber
ている場合、構文を使用します>|
例えば:
echo "some text" >| existing_file
これは、ファイルがまだ存在しない場合にも機能します
&>| file
は動作します。どのシェルとバージョンを使用していますか?zshの@stimulateは両方とも機能するはずですが、bashの場合のみ有効です>|
echo "aaa" &>| test.txt
エラーになります-bash: syntax error near unexpected token |
。noclobberがオンに設定されています。
echo "aaa" >| test.txt 2>&1
別のシェルに固執するか使用する必要があります。
かかわらずNylonSmile
の答えで、 『ソートの』正しい..私はすることができませんでした上書きこのように、ファイル..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
私の問題を解決するために..私は使用していた... >!
、áラ ...
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
明らかに、これに注意してください...
NOCLOBBER
設定されていることを意味します。setopt clobber
デフォルトの動作に戻すために使用します。
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
noclobberが設定されているときに(つまりset -o noclobber
)、std :: cerrとstd :: coutの両方をファイルにリダイレクトする場合は、次のコードを使用できます。
cmd >|file.txt 2>&1
この詳細については、https://stackoverflow.com/a/876242を参照してください。
また、この回答の@TuBuiの質問に対する回答@BrDaHaは、上記の ' 8月9日18:9に提供されました。
エラーが発生する可能性のある出力がある場合は、次のようにアンパサンドと大なり記号を使用できます。
my_task &> 'Users/Name/Desktop/task_output.log'
これにより、stderrとstdoutの両方がログファイルにリダイレクトされます(stdoutのみではなく)。