【发布时间】:2017-10-05 09:30:01
【问题描述】:
我需要在我的 bash 脚本中获取 ssh 命令的返回/错误代码。该命令使用 applescript 将远程机器上的文件移动到垃圾箱。这是一个更大的脚本的一部分:
ssh $login "bash -s" <<-EOF
error=(osascript -e "tell application \"Finder\" to move POSIX file \"$remote_filepath\" to trash");
[[ -n "$error" ]] && { echo -e "\nCannot move file to trash on remote mac"; exit 1; };
EOF
# echo $?; exit
[[ $? -ne 0 ]] && exit 1
# more code ...
如果 osascript 失败,我的目标是让 ssh 命令以代码 1 退出,这样我就可以捕获错误并中止脚本的其余部分。
ssh 运行成功,文件确实被移到了垃圾箱。显然 osascript 运行良好,因为没有显示错误消息。尽管如此,ssh 返回码还是 1(我用 echo $? 语句检查了它。这就是我卡住的地方。我很感激任何关于这里有什么问题的见解。
【问题讨论】:
-
我假设在输入此内容时您错过了
error=$(osascript ...中的$,因为没有它,脚本当然不会运行。 -
嗯。不,$ 不存在。为什么应该这样?这是一个局部变量。该文件在没有 $ 的情况下被丢弃。
-
双括号是你的麻烦:
[ $? -ne 0 ] && exit -
@F.Hauri 双括号和单括号在这里做同样的事情。
-
命令
error=(osascript -e "foo")不执行任何操作。它创建一个包含三个元素的数组。要执行命令并捕获输出,这是我假设你想要做的,你需要说error=$(osascript -e "foo")。