sed over ssh connection +`s'的未知选项

时间:2013-06-10 15:49:35

标签: bash ssh sed

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

sed -i 's/db.url=.*/db.url='$URL'/' config.properties

和URL var分配为:

$URL=jdbc\:oracle\:thin\:@\/\/hostname\:12345\/XYZ

当我在主机上运行这个bash脚本时,它就按预期工作,用URL中指定的url替换url。但是,当我在bash脚本中添加一个命令在我的其他主机上执行此操作时:

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

我收到此错误:

sed: -e expression #1, char 47: unknown option to `s'

任何人都知道这里会发生什么?

2 个答案:

答案 0 :(得分:2)

如果sed表达式在本地主机上运行,​​则它已正确引用,但该字符串随后会传递到远程主机上的shell,其中{{1现在没有引用并作为glob扩展。最简单的方法是通过标准输入将命令传递给远程shell,因此您不必担心引用:

*

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

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

答案 1 :(得分:1)

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