环境/全局变量不会在shell脚本中扩展

时间:2015-03-16 12:53:09

标签: linux bash shell ssh

我正在尝试通过SSH执行一项功能。我可以在关注this post之后继续这样做。

但是如果我在shell脚本中有一些全局/环境变量,那么它们就不会被扩展。以下是SSH节点文件的源代码不是一个选项,因为它类似于本地副本。

我尝试过:

#!/bin/bash

SKS="TYPO"

fun2(){

    arg=$1
    echo $arg >> /tmp/a.o
    echo $SKS >> /tmp/a.o
}

fun1() {

    echo "SKSKSKSKS" > /tmp/a.o
    fun2 "SPSP"

}

fun1

SSH="ssh -4q -o StrictHostKeyChecking=no -o ConnectTimeout=10"
$SSH <ssh-host> "$(typeset -f); fun1"

当我在本地节点上执行此脚本时,它输出为:

cat /tmp/a.o 
SKSKSKSKS
SPSP
TYPO

但在SSHed节点上:

SKSKSKSKS
SPSP

所以这里$SKS未在SSHed节点上展开。

请帮我解决这个问题。

此致 Shridhar

2 个答案:

答案 0 :(得分:1)

您没有将本地$SKS变量设置或导出到远程端。 typeset -f扩展了函数,因此您可以获得远程端的函数,但不能获得变量。

如果你想要远程端可用的变量,你需要在远程执行的shell脚本中分配它,或者以某种方式在本地端的函数中预扩展它。

答案 1 :(得分:0)

尝试将typeset -p SKS添加到SSH命令:

$SSH <ssh-host> "$(typeset -f; typeset -p SKS); fun1"