Environmental/global 变量未在 shell 脚本中展开

Environmental/global variables are not expanded in shell script

我正在尝试通过 SSH 执行功能。关注 this post.

之后我就可以做到了

但是,如果我在 shell 脚本中有一些 global/environmental 变量,则这些变量不会展开。这是文件的源代码到 SSH 节点不是一个选项,因为它就像一个本地副本。

例如我试过:

#!/bin/bash

SKS="TYPO"

fun2(){

    arg=
    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节点上展开

请帮我解决这个问题。

此致, 什里达尔

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

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

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

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