Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sed over ssh连接+;`s';的未知选项;_Bash_Ssh_Sed - Fatal编程技术网

Bash sed over ssh连接+;`s';的未知选项;

Bash sed over ssh连接+;`s';的未知选项;,bash,ssh,sed,Bash,Ssh,Sed,我在bash脚本中有一个sed命令,如下所示: sed -i 's/db.url=.*/db.url='$URL'/' config.properties ssh user@host02 <<EOF sed -i 's/db.url=.*/db.url='$URL'/' config.properties exit EOF URL变量被分配为: $URL=jdbc\:oracle\:thin\:@\/\/hostname\:12345\/XYZ 当我在主机上运行这个bash脚

我在bash脚本中有一个sed命令,如下所示:

sed -i 's/db.url=.*/db.url='$URL'/' config.properties
ssh user@host02 <<EOF
 sed -i 's/db.url=.*/db.url='$URL'/' config.properties
exit
EOF
URL变量被分配为:

$URL=jdbc\:oracle\:thin\:@\/\/hostname\:12345\/XYZ
当我在主机上运行这个bash脚本时,它在主机上按预期工作,将url替换为url中指定的url。但是,当我在bash脚本中添加一个命令以在我的另一台主机上执行此操作时,如下所示:

sed -i 's/db.url=.*/db.url='$URL'/' config.properties
ssh user@host02 <<EOF
 sed -i 's/db.url=.*/db.url='$URL'/' config.properties
exit
EOF

有人知道这里可能发生了什么吗?

如果sed表达式在本地主机上运行,您已经正确地引用了它,但是字符串随后被传递到远程主机上的shell,其中
*
现在被取消引用并扩展为一个glob。最简单的方法是通过标准输入将命令通过管道传输到远程shell,这样您就不必担心引用:

echo "sed -i 's/db.url=.*/db.url=$URL/' config.properties" | ssh user@host02 bash

使用多个命令,您可以考虑使用这里的文档:

ssh user@host02 bash <<EOF
command1
sed -i 's/db.url=.*/db.url=$URL/' config.properities
command2
EOF

sshuser@host02bash解决方案是在$URL周围使用双单引号('),如下所示:'$URL'

我可以引用ssh中的命令吗?除此之外,我还有很多命令被调用,显然不想管每个人,我也不想让这个命令成为独立的命令。您可能还想简单地考虑“代码> SCP < /代码>本地编写的脚本,并通过<代码> SSH 远程执行。试图获得正确的报价最多是棘手的,最坏的情况下是不可能的。here文档也可能有用。我已经使用了here文档,如我的原始示例中所示。此外,我将文件scp到另一台主机,我使用ssh在其移动到的位置运行bash脚本。区别在于,我在远程端显式运行
bash
实例。