Script c shell saya tidak mengetahui status keluar 2, ketika tar gagal

-1

Saya memiliki kode di bawah ini

ssh ${DESTSERVNAME} 'cd /export/home/path/to/dir; Today=`date +%Y%m%d`; tar -cvf file_name.tar *${Today}*.*; gzip file_name.tar'    
if [ $? != 0 ]    
then    
    echo "Something is wrong with connection to ${DESTSERVNAME} or $

{DAILY_DEST_DIR}. Silakan periksa file $ LOGF, koneksi ke $ {DESTSERVNAME} atau file di $ {DAILY_DEST_DIR}, $ {NAME} .sh diakhiri secara abnormal "| mailx -r [email protected] -s" !!! Silakan baca $ LOGF dan lakukan tindakan yang sesuai "[email protected]
keluar 1
fi

Saya tidak mengerti mengapa kondisi saya jika tidak mencapai $? = 2
Saya menggunakan AIX dan ini adalah shell ac, dan juga saluran email saya tidak berfungsi.
Adakah yang bisa membantu saya?

osamuyl
sumber
Tapi ... itu bukan csh - if [ … ](dan if <cmd>secara umum) pasti sintaksis Bourne shell.
grawity
OK, tidak ada perbedaan. Kenapa tidak bekerja?
osamuyl
Katakanlah seperti ini. pesan tar adalah "tar: 20170208. *: Tidak ada file atau direktori", tetapi tetap membuat file tar
osamuyl

Jawaban:

0

Jadi dalam perintah jarak jauh Anda, Anda memberi tahu shell untuk mengabaikan status keluar. Ingat perbedaan antara a; bdan a && b: yang pertama menjalankan "b" tidak peduli apakah "a" berhasil atau gagal, sedangkan yang kedua berhenti jika "a" gagal.

Jadi yang Anda dapatkan sshadalah status keluar dari perintah terakhir yang dijalankan, yang selalu gzip karena ;pemisah tidak peduli dengan yang sebelumnya.

Sebaliknya, gunakan sesuatu seperti ssh $host "cd /foo && tar --foo && gzip foo.tar".

grawity
sumber