在EOF bash脚本中重用变量

时间:2018-01-04 10:23:38

标签: bash variables eof

我有一个脚本做这样的事情:

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

有办法做到这一点吗?

提前致谢。 问候, 泽维尔

1 个答案:

答案 0 :(得分:3)

通常,执行的命令有三条传递信息的路径:

  1. 说明退出代码。
  2. 通过输出。
  3. 创建文件。
  4. 可以更改父进程的(环境)变量。对于所有子进程都是如此,并且您的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"