我正在编写部署脚本,如果发生任何错误,我需要回滚。
例如:
#!/bin/bash
ssh myapp '
mkdir /some/dir
# check if above command failed, and execute rollback script if needed
'
# or maybe do it from here?
Run Code Online (Sandbox Code Playgroud)
现在当我执行这个脚本时,如果 mkdir 失败,它会在我的屏幕上打印它并继续执行。我需要抓住那个错误并做些什么。
的退出状态ssh
将是远程命令的退出状态。例如
ssh myapp 'exit 42'
echo $?
Run Code Online (Sandbox Code Playgroud)
应该打印 42($?
是最后执行的命令的退出状态)。
如果mkdir
失败,一种选择是立即退出:
ssh myapp 'mkdir /some/dir || exit 42; do-more-stuff'
if [[ $? = 1 ]]; then
echo "Remote mkdir failed"
fi
Run Code Online (Sandbox Code Playgroud)
如果可能,最好尝试处理脚本中的任何远程故障。
如果你真的需要捕捉错误信息,你可以试试这个:
#!/bin/bash
result=`ssh myapp 'mkdir /some/dir' 2>&1`
if [[ -n $result ]]; then
echo "the following error occurred: $result"
fi
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您将标准错误输出重定向到标准输出并将 ssh 命令的输出保存到$result
. 如果您只需要错误代码/退出状态,请参阅此答案。