我在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'
任何人都知道这里会发生什么?
答案 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''