Как отловить ошибку при установке удаленного соединения в сценарии оболочки - PullRequest
0 голосов
/ 05 ноября 2018

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

#! /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 Ответ

0 голосов
/ 05 ноября 2018

Есть несколько вещей, которые нужно сделать.

Во-первых, вам нужно извлечь ввод как функцию, чтобы разрешить передачу с помощью command3 , и она будет более разборчивой:

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"
...