为什么我的sed操作无效?

时间:2016-05-17 08:41:19

标签: bash shell sed vagrant

我使用virtual machin配置Vagrant e。 对于我的Shell脚本,这是我的Vagrant输出 debug 模式:

==> mom1: + enable_https
==> mom1: ++ cat /etc/letsencrypt/live/mom.anevis.solutions/.kpass
==> mom1: + local password=kvnilcFqq+sXmLlonoK1dM=
==> mom1: + sed -i 's,<property name="keyStorePassword" value="password" />,<property name="keyStorePassword" value="kvnilcFqq+sXmLlonoK1dM=" />,' /opt/activemq/conf/jetty.xml

它似乎工作正常,但是当我检查应该被修改的文件时,它是空的!

<property name="keyStorePassword" value="" />

这是我的Shell脚本:

enable_https(){
  local kpass=$(cat /etc/letsencrypt/live/company.com/.kpass)
  sed -i "s,<property name=\"keyStorePassword\" value=\"password\" />,<property name=\"keyStorePassword\" value=\"${kpass}\" />," /opt/activemq/conf/jetty.xml
}

有趣的是,当我在本地尝试相同的脚本时,它可以正常工作,但是当我在使用Vagrant进行配置时尝试使用它时却不行。

有什么建议吗? :)

2 个答案:

答案 0 :(得分:1)

在这里,试试这个:
sed -i "s/<property name=\"keyStorePassword\" value=\"password\" \/>/<property name=\"keyStorePassword\" value=\"${kpass}\" \/>/" /opt/activemq/conf/jetty.xml

如果它不起作用,请尝试使用一些测试文本替换值${kpass}

答案 1 :(得分:0)

仅供进一步参考,我的问题是我的sed被应用的同一个文件,之前被另一个脚本修改过。这意味着,我的sed确实是正确的。然而,将它应用于文件是不可能的,因为这个不再相同。