【发布时间】:2014-09-20 03:06:05
【问题描述】:
我正在运行一系列 sshpass > ssh > 命令,我想将在远程服务器中运行的其中一个命令的退出代码存储在一个变量中,以便在 ssh 完成后我可以在本地访问它。到目前为止我所做的似乎没有存储任何东西。请帮忙!
我的代码:
sshpass -p password ssh user@ip "echo \"first command\" ; su -lc \"./root_script.sh\" ; set MYVAR = $? ; rm root_script.sh \"
if (( $MYVAR != 0 )) ; then
echo "Cannot continue program without root password"
exit
fi
问题: 命令全部执行(脚本运行正常),但未设置变量 MYVAR。我已经将它初始化为一个奇怪的数字,并且值没有改变。 su 退出码未存储!
注意事项:
1) 我不想做 MYVAR=$(ssh....) 因为 ssh 嵌套在 sshpass 中,我不想要其中任何一个的退出代码,我想要返回代码su 命令在远程服务器中运行
2) 我使用了 set 命令,因为简单的赋值给了我一个错误,说命令无法识别。
3) 我尝试了不同形式的引用( \$? 或 '$?' 或 "$?" ),但似乎都不起作用
4) 我尝试将 MYVAR 导出到环境变量,并尝试在代码行之前取消设置。仍然没有存储任何值。
【问题讨论】:
-
myvar=$(ssh ...)不存储退出代码,而是存储输出。除非 sshpass 修改了输出,否则这里不应该相关。 -
...除此之外 --
export使 子进程 可以访问变量。没有父进程的积极参与(例如读取和存储或评估其子进程的输出流),您无法使父进程可以访问变量。 -
因此,您可以
echo $?返回 su 命令的退出状态。