Q:基本コマンドが失敗したときに空のファイルの書き込みを防ぐにはどうすればよいですか?

Q:基本コマンドが失敗したときに空のファイルの書き込みを防ぐにはどうすればよいですか?

コマンドを実行してファイルに書き込んでから、そのファイルを別の目的に使用しようとします。

私が必要とするもののポイントは次のとおりです。

myAPICommand.exe parameters > myFile.txt

問題はmyAPICommand.exe失敗が多いということだ。いくつかの問題を解決してもう一度実行してみましたが、「既存のファイルを上書きできません」という問題が発生しました。rmスペースをクリーンアップmyFile.txtして再度実行するには、別のコマンドを実行する必要がありますmyAPICommand.exe

最も深刻な問題ではありませんが、迷惑です。

基本コマンドが失敗したときに空のファイルを作成したくない場合はどうすればよいですか?

ベストアンサー1

「noclobber」を設定する必要があります。次の例を確認してください。

$ echo 1 > 1  # create file
$ cat 1
1
$ echo 2 > 1  # overwrite file
$ cat 1
2
$ set -o noclobber
$ echo 3 > 1  # file is now protected from accidental overwrite
bash: 1: cannot overwrite existing file
$ cat 1
2
$ echo 3 >| 1  # temporary allow overwrite
$ cat 1
3
$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ cat 1
3
$ set +o noclobber
$ echo 4 > 1
$ cat 1
4

「noclobber」は上書き専用ですが、以下を追加することもできます。

$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ echo 4 >> 1

フラグが設定されていることを確認するには、echo $-フラグが設定されているC(またはset -o |grep clobber)入力して確認できます。

Q:基本コマンドが失敗したときに空のファイルの書き込みを防ぐにはどうすればよいですか?

リクエストがありますか?単に出力を変数に保存し、空であることを確認できます。次の例を確認してください。変数の確認方法は、必要に応じて微調整する必要があります。この例では、引用しなかったか、${cmd_output+x}変数が次の内容のみを含むファイルを作成しないように設定されていることを確認するなどのものを使用しませんでした。スペース。

$ cmd_output=$(echo)
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e '\n\n\n')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e ' ')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e 'something')
$ test $cmd_output && echo yes || echo no
yes

$ cmd_output=$(myAPICommand.exe parameters)
$ test $cmd_output && echo "$cmd_output" > myFile.txt

単一変数を使用せずに出力全体を保存する例:

log() { while read data; do echo "$data" >> myFile.txt; done; }
myAPICommand.exe parameters |log

おすすめ記事