使用expect在ssh之后加载配置文件

使用expect在ssh之后加载配置文件

我正在尝试 ssh 到远程主机,在.zshrc主机上的文件中加载环境变量,然后使用该环境变量执行命令。

到目前为止,这是我的脚本,

#!/usr/bin/expect -f
spawn ssh hostname
send "echo $my_variable\n"
interact

我的远程主机上的文件.zshrc包含以下内容,

export my_variable=banana_tree

运行上面的脚本时我得到这个输出,

spawn ssh hostname
can't read "my_variable": no such variable
    while executing
"send "echo $my_variable\n""
    (file "/Users/me/myscript.sh" line 6)

我知道错误消息说期望找不到变量,因为它没有在我执行脚本的环境中定义,一种解决方法是在我运行脚本的地方定义变量,但我更喜欢仅在可能的情况下保留在远程主机上定义的变量。

答案1

我必须在脚本中转义美元符号,所以它变成了,

#!/usr/bin/expect -f
spawn ssh hostname
send "echo \$my_variable\n"
interact

它看起来像是.zshrc正在加载,但要在主机上加载环境变量,我必须转义美元符号,而如果我想在脚本中定义环境变量,我不会转义美元符号。

相关内容