从ssh命令设置本地bash变量

时间:2014-07-28 20:12:30

标签: bash ssh set

我正在运行一系列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导出到环境变量中,我尝试在代码行之前取消它。仍然没有存储任何值。

1 个答案:

答案 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"