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

How to Catch an Error While Establishing Remote Connection in Shell Script

这是我的 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

根据我目前对脚本的了解,如果命令执行失败,控制权将简单地传递给下一个命令。但是如果在上面的block中sftp命令建立网络连接失败怎么办?是不是说command 1command 2会在本地执行?或者控件会跳转到command 3?

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

有几件事要做。

首先,您需要将输入提取为函数,以允许使用 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 read/check/parse 错误信息,你可以给它 "$tmpFile"