【问题标题】:Why isn't my sed operation working?为什么我的 sed 操作不起作用?
【发布时间】:2016-05-17 08:41:19
【问题描述】:

我正在使用Vagrant 配置virtual machine。 这是我的 Vagrant 输出,debug 模式,用于我的 Shell 脚本:

==> 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 提供期间尝试使用它时就不行了。

有什么建议吗? :)

【问题讨论】:

  • 即使它出现在调试中,它也会显示该变量为空。回显它会返回一个值吗?

标签: bash shell sed vagrant


【解决方案1】:

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

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

【讨论】:

  • 感谢谢尔盖!
【解决方案2】:

仅供参考,我的问题是我的sed 被应用的同一个文件之前被另一个脚本修改过。这意味着,我的sed 确实是正确的。但是无法将它应用到文件上,因为这个不再相同了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多