linux - 环境/全局变量不在 shell 脚本中展开

标签 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节点上展开。

请帮我解决这个问题。

问候, 什里达尔

最佳答案

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

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

关于linux - 环境/全局变量不在 shell 脚本中展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29077314/

相关文章:

python - 当从 bash 调用脚本时终止子进程

linux - 如何编译要使用 Gprof 进行分析的驱动程序

bash - 使用 AWK 使用来自多个输入文件的字符串作为 CSV 文件中选择列的搜索条件

bash - 如何在 bash 中捕获信号后打印消息并继续?

node.js - 创建独立的 Node js 应用程序安装程序

linux - 设置变量 Linux

linux - 如何修复 'sudo: no tty present and no askpass program specified' 错误?

python - 尝试安装 Jupyter notebook

bash - 如何获取管道中进程的PID

python - 在 python 中执行交互式 shell 脚本