【问题标题】:Vagrantfile: How do I pass a host environment variable with an unescaped dollar sign in it?Vagrantfile:如何传递带有未转义美元符号的主机环境变量?
【发布时间】:2019-12-05 00:10:25
【问题描述】:

如果我在适当的位置向Vagrantfile 添加这样的内容:

vm.provision "shell",
path: "my_node.sh",
env: {"MY_VARIABLE"=>ENV['CONTAINS_A_DOLLAR_SIGN']}

在我的my_node.sh 中添加:

echo "$MY_VARIABLE"

如果我的CONTAINS_A_DOLLAR_SIGN 环境变量是before$after 我的vagrant up 输出将包含before 但不包含$after

如何在Vagrantfile 中解决此问题?

【问题讨论】:

  • 是否将环境变量写为before\$after 一个选项?
  • 这可能是 Ruby 解释器或 shell 解释器将 $after 解析为具有 nilnull 值的变量,两者都转换为字符串为 empty。您可以将此值显式设置为文字字符串并由解释器进行块插值吗?添加 Ruby 标签以防根本原因是 MRI。
  • 环境变量的值不能改,所以我说不。

标签: ruby bash vagrant vagrantfile vagrant-windows


【解决方案1】:

在@matt-schuchard 的提示下,我在 Vagrantfile 的顶部添加了这个:

require 'shellwords'

改变了

env: {"MY_VARIABLE"=>ENV['CONTAINS_A_DOLLAR_SIGN']}

env: {"MY_VARIABLE"=>Shellwords.escape(ENV['CONTAINS_A_DOLLAR_SIGN'])}

现在vagrant up 输出before$after 而不仅仅是before

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 2018-01-08
    • 2020-10-23
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多