将局部变量传递给远程shell bash脚本

时间:2018-05-08 03:28:29

标签: bash shell variables local-variables remote-host

尝试使用bash脚本将局部变量传递给远程shell。这是我正在尝试的。这是test.sh

#!/bin/bash

envi=$1

function samplefunction {
                        echo "Environment selected is $envi"
                        }

if [ "$envi" = "test" ]; then
   ssh user@remotehost <<EOF
   $(typeset -f samplefunction)
   samplefunction
EOF

else
 echo "Please pass correct parameter which is - test"
fi

当我尝试执行“./test.sh test”时,我得到的结果是“Environment selected is”。 shell无法将变量传递给远程系统。

1 个答案:

答案 0 :(得分:0)

ssh不会(并且不能)在远程端提供此类变量。

您可以像嵌入函数一样嵌入定义:

ssh user@remotehost <<EOF
   $(declare -p envi)
   $(typeset -f samplefunction)
   samplefunction
EOF

您还可以复制所有已知变量。在这种情况下,它有助于压缩有关设置只读值的错误:

ssh user@remotehost <<EOF
   {
     $(declare -p)
   } 2> /dev/null
   $(typeset -f samplefunction)
   samplefunction
EOF

如果您有经常要复制的特定变量,可以选择让ssh通过向您的ssh配置添加SendEnv envi来自动发送该变量。必须导出变量才能使其生效。