我试图将环境变量传递给我的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/