Как отловить ошибку при установке удаленного соединения в сценарии оболочки

Вот так выглядит часть моего сценария оболочки.

#! /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"
Другие вопросы по тегам