我想在远程机器上执行一个shell脚本,我使用下面的命令来实现这个function,
ssh user@remote_machine "bash -s" < /usr/test.sh
shell脚本在远程机器上正确执行。 现在我已经对脚本进行了一些更改,以从configuration文件中获取一些值。 该脚本包含下面的行,
#!bin/bash source /usr/property.config echo "testName"
property.config:
testName=xxx testPwd=yyy
现在,如果我在远程机器上运行shell脚本,我得到没有这样的文件错误,因为/远程机器上将不可用/usr/property.config。
如何传递configuration文件以及在远程机器上执行的shell脚本?
只有你可以引用你创建的config
文件并且仍然运行你的脚本,你需要把配置文件放在需要的路径上,有两种方法可以做到这一点。
如果config
几乎总是固定的,不需要修改,那么在需要运行脚本的主机上在本地config
,然后在脚本中输入config
文件的绝对路径,并确保运行该脚本的用户具有访问它的权限。
如果需要在每次运行该脚本时发送配置文件,则可以在发送和调用脚本之前简单地scp
该文件。
scp property.config user@remote_machine:/usr/property.config ssh user@remote_machine "bash -s" < /usr/test.sh
编辑
根据要求,如果你想强制在一行中做到这一点,这是如何做到的:
property.config
testName=xxx testPwd=yyy
test.sh
#!bin/bash #do not use this line source /usr/property.config echo "$testName"
现在你可以像约翰所说的那样运行你的命令了:
ssh user@remote_machine "bash -s" < <(cat /usr/property.config /usr/test.sh)
尝试这个:
ssh user@remote_machine "bash -s" < <(cat /usr/property.config /usr/test.sh)
那么你的脚本不应该在内部获取配置。
第二个选项 ,如果你需要传递的是环境变量:
这里描述了几种技术: https : //superuser.com/questions/48783/how-can-i-pass-an-environment-variable-through-an-ssh-command
我最喜欢的一个也许是最简单的:
ssh user@remote_machine VAR1=val1 VAR2=val2 bash -s < /usr/test.sh
这当然意味着你需要从本地配置文件中建立环境变量赋值,但希望这很简单。