我正在尝试通过 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/