Anda dapat menghapus file setelah dijalankan, jika perintah gagal, dengan
myAPICommand parameters > myFile.txt || rm myFile.txt
Tapi saya akan menyarankan mengalahkan file sebagai gantinya:
myAPICommand parameters >| myFile.txt
Lihat Apa itu operator kontrol dan pengalihan shell? untuk detailnya.
Anda harus menyetel "noclobber", periksa contoh berikut:
$ 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" hanya untuk ditimpa, Anda masih dapat menambahkan:
$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ echo 4 >> 1
Untuk memeriksa apakah Anda telah menyetel flag tersebut, Anda dapat mengetikkan echo $-
dan lihat apakah Anda memiliki C
kumpulan bendera (atau set -o |grep clobber
).
T:Bagaimana cara menghindari penulisan file kosong saat perintah dasar saya gagal?
Ada persyaratan? Anda cukup menyimpan output dalam variabel dan kemudian memeriksa apakah kosong. Periksa contoh berikut (perhatikan bahwa cara Anda memeriksa variabel perlu disesuaikan dengan kebutuhan Anda, dalam contoh saya tidak mengutipnya atau menggunakan yang seperti ${cmd_output+x}
yang memeriksa apakah variabel disetel, untuk menghindari penulisan file yang hanya berisi spasi putih.
$ 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
Contoh tanpa menggunakan satu variabel yang menampung seluruh keluaran:
log() { while read data; do echo "$data" >> myFile.txt; done; }
myAPICommand.exe parameters |log
Anda dapat membuat skrip untuk menjalankan myAPICommand.exe, tetapi pertama-tama hapus myFile.txt jika ada. Maka Anda tidak perlu terus-menerus melakukan perintah rm untuk membersihkan.
Seperti:
if [ -e myFile.txt ]
then
rm myFile.txt && myAPICommand.exe
else
Anda juga bisa membuatnya agar perintah Anda bersih sendiri. Jika file kosong tambahkan sesuatu seperti berikut.
Seperti:
if [ -s myFile.txt ]
then
EXIT 0
else
rm myFile.txt && EXIT 1
fi