コマンドが失敗した場合、実行後にファイルを削除できます。
myAPICommand parameters > myFile.txt || rm myFile.txt
ただし、代わりにファイルを上書きすることをお勧めします:
myAPICommand parameters >| myFile.txt
シェルの制御およびリダイレクト演算子とは何ですか? を参照してください。詳細はこちら
「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:base コマンドが失敗したときに空のファイルを書き込まないようにするにはどうすればよいですか?
要件はありますか?出力を変数に格納し、それが空かどうかを確認するだけです。次の例を確認してください (変数を確認する方法は、必要に応じて微調整する必要があることに注意してください。この例では、引用したり ${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
myAPICommand.exe を実行するスクリプトを作成できますが、最初に myFile.txt が存在する場合はそれを削除します。そうすれば、常に rm コマンドを実行してクリーンアップする必要はありません。
いいね:
if [ -e myFile.txt ]
then
rm myFile.txt && myAPICommand.exe
else
コマンドがそれ自体の後にクリーンアップされるようにすることもできます。ファイルが空の場合は、次のようなものを追加します。
いいね:
if [ -s myFile.txt ]
then
EXIT 0
else
rm myFile.txt && EXIT 1
fi
noexec オプションを使用してファイル システムで bash スクリプトまたは c バイナリを実行する
systemd/init がない場合に電源をオフにする方法 (例:init=/bin/bash を使用)?