GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mengeluarkan perintah ke file, tanpa mendapatkan file kosong karena kesalahan?

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

Linux
  1. Cara Menangkap Output Perintah Teratas Unix ke File dalam Format yang Dapat Dibaca

  2. Bagaimana saya bisa memeriksa file yang ada dan menjalankan perintah jika tidak?

  3. Bagaimana saya bisa menghubungkan file di Linux?

  1. Bagaimana cara menambahkan output ke file?

  2. Bagaimana cara mengarahkan output dari perintah waktu ke file di Linux?

  3. Bagaimana saya bisa mengulang output dari perintah shell?

  1. Cara Menyimpan Output Perintah ke File di Linux

  2. Bekerja dengan Input Output dan Error Redirection di Linux

  3. Bagaimana cara mencetak keluaran perintah Linux ke file?