Как отловить ошибку при установке удаленного соединения в сценарии оболочки
Вот так выглядит часть моего сценария оболочки.
#! /bin/sh
sftp -i $IdentityFile $ServerAddress << EOF
command 1 #Execute in the remote
command 2 #Execute in the remote
bye
EOF
command 3 #Execute locally
Согласно моим текущим знаниям сценариев, если команда не выполняется, управление просто переходит к следующей команде. Но что, если команда sftp не сможет установить сетевое соединение в вышеуказанном блоке? Значит ли это command 1
а также command 2
будет выполняться локально? Или управление перейдет к command 3
?
Как отловить возможную ошибку в sftp и направить управление на command 3
? И если это возможно, могу ли я обнаружить ошибку, используя ?
переменная, чтобы предпринять определенные упреждающие действия? Некоторое руководство будет отличным.
1 ответ
Есть несколько вещей, которые нужно сделать.
Во-первых, вам нужно извлечь ввод как функцию, чтобы разрешить передачу с помощью команды 3, и она будет более разборчивой:
function sfpInstruction() {
cat << EOF
command 1
command 2
bye
EOF
}
Таким образом, ваша инструкция sftp может быть изменена на:
tmpFile="/tmp/errorFile.txt"
sftp -i $IdentityFile $ServerAddress $( sfpInstruction ) 2>"$tmpFile" || command3
Такой способ:
- все сообщения об ошибках в вашем файле ошибок
- в любом случае, если sftp выходит с ошибочным статусом (НЕ 0), GNU/Bash выполнит команду 3
- если, кроме того, вы хотите, чтобы команда 3 прочитала / проверила / проанализировала сообщения об ошибках, вы можете указать ей "$tmpFile"