sed 在 vagrant 提供中出错,但在手动执行中正常

标签 sed vagrantfile vagrant-provision

我正在构建一个 Vagrant 项目,它将提供(我用这个词对吗?)一个带有自定义 map 的 Minecraft 服务器。在提供过程中,我不断收到 sed 错误 sed: -e expression #1, char 39:unknown option to 's' 但如果执行 sed 命令,则不会出现相同的错误手动。我的代码有什么问题吗?

流浪文件:

$map_install = <<INLINE_SCRIPT
cd /home/vagrant
cp /vagrant/min.config /home/vagrant/server.properties
sed -i 's/resource-pack=/resource-pack=https:\/\/example.com\/resources.zip/g' server.properties
INLINE_SCRIPT

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision "shell", inline: $map_install, privileged: false
end

服务器属性:

#Minecraft server properties
resource-pack=

最佳答案

经过更多研究,我发现 https:// 协议(protocol) header 以某种方式干扰了原始 sed 脚本,即使我转义了正斜杠。因此,我将 sed 分隔符从正斜杠更改为美元符号,这解决了问题。现在 sed 命令变成:

sed -i 's$resource-pack=$resource-pack=https://example.com/resources.zip$g' server.properties

关于sed 在 vagrant 提供中出错,但在手动执行中正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43650805/

相关文章:

linux - 如何使用 sed 查找替换大于 100 的数字?

regex - 如何使用 grep/sed/awk 从文本文件开头删除模式

linux - 使用 AWK 将 float 转换为用户定义的输出

windows - 如何设置 SMB 用户名和密码?

Vagrant 单向同步文件夹

mysql - Vagrant 供应

python - Vagrant 在提供期间没有安装 pip

ruby-on-rails - Vagrant -v 忽略 ffi -nokogiri 和 unf_ext 因为它的扩展没有构建

linux - 如何使用 sed 和 awk 命令提取模式?

node.js - 使用 NodeJs 和 vagrant