shell - 通过ssh传递环境变量以进行远程扩展

标签 shell ssh

我试图将环境变量传递给我的shell脚本,然后回显传入的内容。在此示例中,$ HOME是已经设置的环境变量。
./my_script.ksh $HOME

#! /usr/bin/ksh
my_var=${1}
echo "You sent: ${my_var}"

我希望我的输出为You sent: $HOME,但它正在对其进行评估并生成You Sent: /home/blah/usr
这样做的重点是我计划执行一个SSH命令,该命令我需要传递$ my_var太未经评估(也就是$ HOME),因为每个服务器上的$ HOME是一个不同的值,对于我希望它使用的SSH命令,来自服务器的值也是SSH。所以希望只是将其传递给它,因此在SSH期间它将正确评估

这是我想发生的事的一个例子。假设$ HOME已在Server1和Server2上设置,如下所示:
Server1 $HOME: /home/blah/usr
Server2 $HOME: /home/superblah/newusr

从Server1执行my_script.ksh $HOME
该脚本与上面相同,但多了一行:
ssh my_user@Server2 "echo Server got: $my_var"

我目前的输出是:
You sent: /home/blah/usr
Server got: /home/blah/usr

我想要的只是生成的ssh命令:
Server got: /home/superblah/newusr

谢谢。

最佳答案

您可以通过将变量用单引号引起来来防止解析变量

./my_script.ksh '$HOME'

我这样尝试过:
[host1]$ echo $HOME
/home/user1
[host1]$ ssh user2@host2 echo '$HOME'
/home/user2
[host1]$

关于shell - 通过ssh传递环境变量以进行远程扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401804/

相关文章:

c++ - 对于 Windows 上的 C++,我应该使用哪个 IDE?

linux - Bash fork 子 shell

c - 使用 : as delimiter in shell 提取字符串

linux - 来自文件的子字符串

windows - 如何在 VS Code 中使用 Windows 内置的 OpenSSH ssh-agent,而不是 Git bash?

bash - 嵌套ssh中bash shell脚本中的命令行参数

java - 使用 JSch 的 SSH 内部的 HTTPS 隧道

shell - 无法在终端中暂停 nano

linux - 使用另一个命令进行管道传输时如何读取命令的返回码

linux - SSH 身份验证(无 PAM): how to know if user logged in by key or password?