Bagaimana memeriksa apakah ada kesalahan yang terjadi selama ssh?

8

Saya sedang menulis skrip penerapan, dan saya harus mengembalikan jika ada kesalahan.

Misalnya:

#!/bin/bash
ssh myapp '
    mkdir /some/dir
    # check if above command failed, and execute rollback script if needed
'
# or maybe do it from here?

Saat ini ketika saya menjalankan skrip ini, jika mkdir gagal, ia mencetaknya di layar saya dan melanjutkan eksekusi. Saya perlu menangkap kesalahan itu dan melakukan sesuatu.

ChocoDeveloper
sumber

Jawaban:

6

Status keluar sshakan menjadi status keluar dari perintah jarak jauh. Contohnya

ssh myapp 'exit 42'
echo $?

harus mencetak 42 ( $?adalah status keluar dari perintah terakhir yang dijalankan).

Salah satu opsi adalah segera keluar jika mkdirgagal:

ssh myapp 'mkdir /some/dir || exit 42; do-more-stuff'
if [[ $? = 1 ]]; then
   echo "Remote mkdir failed"
fi

Mungkin lebih baik untuk mencoba menangani kegagalan jarak jauh dalam skrip Anda, jika memungkinkan.

chepner
sumber
5

Jika Anda benar-benar perlu menangkap pesan kesalahan, Anda dapat mencoba ini:

#!/bin/bash
result=`ssh myapp 'mkdir /some/dir' 2>&1`
if [[ -n $result ]]; then
    echo "the following error occurred: $result"
fi

Dengan ini Anda mengarahkan output kesalahan standar ke output standar dan menyimpan output dari perintah ssh ke $result. Jika Anda hanya memerlukan kode kesalahan / status keluar, lihat jawaban ini .

bicara
sumber