我有一个脚本做这样的事情:
var1=""
ssh xxx@yyy<<'EOF'
[...]
var2=`result of bash command`
echo $var2 #print what I need
var1=$var2 #is there a way to pass var2 into global var1 variable ?
EOF
echo $var1 # the need is to display the value of var2 created in EOF block
有办法做到这一点吗?
提前致谢。 问候, 泽维尔
答案 0 :(得分:3)
通常,执行的命令有三条传递信息的路径:
不可以更改父进程的(环境)变量。对于所有子进程都是如此,并且您的ssh
进程不是免除的。
我不会依赖ssh
传递远程进程的退出代码(因为即使它在当前实现中有效,这也很脆弱; ssh
也可能想要声明自己的成功或失败的退出代码,而不是远程流程。
使用文件似乎也不合适,因为远程进程可能有不同的文件系统(但如果远程和本地计算机共享一个NFS,例如,这可能是一个选项)。
所以我建议使用远程进程的输出来传递信息。你可以这样做:
var1=$(ssh xxx@yyy<<'EOF'
[...]
var2=$(result of bash command)
echo "$var2" 1>&2 # to stderr, so it's not part of the captured output
# and instead shown on the terminal
echo "$var2" # to stdout, so it's part of the captured output
EOF
)
echo "$var1"