在Shell脚本中建立远程连接时如何捕获错误

时间:2018-11-05 03:07:32

标签: bash shell error-handling sh openssh

这是我的shell脚本的一部分的样子。

#! /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 1command 2将在本地执行?还是控件将跳至command 3

如何在sftp中捕获可能的错误并将控件定向到command 3?如果可能的话,我可以使用?变量检测到错误,以采取某些先发制人的措施吗?一些指导会很棒。

1 个答案:

答案 0 :(得分:1)

有几件事要做。

首先,您需要将输入提取为函数,以允许使用 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将执行command3
  • 如果您还希望Command3读取/检查/解析错误消息,则可以给它“ $ tmpFile”