我正在运行一系列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导出到环境变量中,我尝试在代码行之前取消它。仍然没有存储任何值。
答案 0 :(得分:1)
首先,您需要将要捕获的内容放在流程的 stdout 上。
其次,您需要为远程命令使用单引号而不是双引号 - 否则,在将字符串传递给ssh之前,$?
将替换为其本地值!
exit_status=$(sshpass -p password ssh user@ip 'echo "first command" >&2; \
su -lc "./root_script.sh" >&2; echo "$?"; rm root_script.sh')
echo "Exit status of remote command is $exit_status"