2016-05-17 85 views
4

我正在使用Vagrant供应virtual machin e。 这是我的流浪输出,调试模式,为我Shell脚本:为什么我的sed操作不起作用?

==> 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 
} 

有趣的是,当我尝试在本地相同的脚本,它的工作原理,但不是当我尝试设置与流浪期间使用它。

有什么建议吗? :)

+2

即使它显示在调试中,该变量也会显示为空。回显它是否会返回一个值? – 123

回答

0

只是为了进一步参考,我的问题是我的sed正在被应用的同一个文件,它之前被另一个脚本修改过。这意味着,我的sed是正确的,确实如此。然而,它不可能在文件上应用,因为这个不再一样了。

1

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

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

+0

谢谢你的谢尔盖! –

+0

不客气,很乐意提供帮助。 ) –