我想在远程机器中执行一个shell脚本,我使用下面的命令实现了这一点,
ssh user@remote_machine"bash -s" < /usr/test.sh
shell脚本在远程计算机中正确执行。现在,我在脚本中做了一些更改,以从配置文件中获取一些值。脚本包含以下行,
#!bin/bash
source /usr/property.config
echo"testName"
属性.config:
testName=xxx
testPwd=yyy
现在,如果我在远程计算机中运行shell脚本,我不会得到这样的文件错误,因为/usr/property.config在远程计算机中不可用。
如何将配置文件与要在远程计算机中执行的shell脚本一起传递?
使用scp?
@为什么在目标不是复制的时候使用scp?
SCP是使文件到达目标的最可靠的方法。还有其他选择,比如通过stdin(ssh user@remote_host 'cat >/path/to/config.file; /remote/command' < /local/config.file)发送,但scp是最可靠的方式。
唯一可以引用您创建并仍然运行脚本的config文件的方法是,您需要将配置文件放在所需的路径上,有两种方法可以做到这一点。
如果config几乎总是固定的,而您不需要更改它,那么在需要运行脚本的主机上本地设置config,然后在脚本中放置到config文件的绝对路径,并确保运行脚本的用户有权访问它。
如果每次运行该脚本时都需要发送配置文件,那么在发送和调用该脚本之前,可能只需发送该文件即可。
scp property.config user@remote_machine:/usr/property.config
ssh user@remote_machine"bash -s" < /usr/test.sh
编辑
根据请求,如果您想在一行中强制执行,可以这样做:
属性.CONFIG
testName=xxx
testPwd=yyy
试验室
#!bin/bash
#do not use this line source /usr/property.config
echo"$testName"
现在,您可以按照John的建议运行命令:
ssh user@remote_machine"bash -s" <
谢谢。。#2需要执行多个命令。是否可以合并为单个命令。、.?
你可以这样做,但是这是欺骗,如果你真的想把它们合并成一个命令,那么你就必须把config和bash脚本的输出放在一个文件中(如@john所提到的),如果你想,我可以把这个方法作为好吧,如果你想改变它的话。
谢谢阿南德。我按预期完成了任务,但我仍然很想得到更多的选择。请分享你的方法。
@Jugi我更新了答案来描述另一种技术。
谢谢。。最后一个问题,如何通过一个论点:(?
@jugi不需要传递任何参数,因为config文件(我假设它也是用bash脚本语法编写的)已经与bash脚本连接成一个独立的脚本,可以在远程机器上执行,而不需要任何依赖。
试试这个:
ssh user@remote_machine"bash -s" <
那么脚本不应该在内部源代码配置。
第二个选项,如果您只需要传递环境变量:
这里介绍了一些技术: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
当然,这意味着您需要从本地配置文件构建环境变量分配,但希望这很简单。
谢谢。。配置文件包含更多的属性值集。它就像一个包装配置文件,定义配置文件中的所有值并基于该值执行脚本。把这些价值观当作论据来传递似乎有点困难
-bash:意外标记('. Getting this error while runnings sh user@remote_machine"bash-s"
^^修正了打字错误。
@Anishsane第二行应该是ssh user@remote_machine"bash -s" < 源代码未定义,不能这样使用,我假设是一个拼写错误。
它按我的预期工作。