解析 Ruby returns 键不是值

parsing in Ruby returns key not value

我根本不知道 Ruby。我只需要 运行 在 ruby 中写入 Vagrantfile,我从配置文件中得到了错误的值。

流浪文件:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.

require 'yaml'
current_dir = File.dirname(File.expand_path(__FILE__))
settings = YAML.load_file("#{current_dir}/vars.yaml")

Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.

  config.vm.define "testsbox" do |testsbox|
    testsbox.vm.box = "generic/rhel8"
    testsbox.vm.hostname = "testsbox"
    testsbox.vm.provision "shell", privileged: true, 
      env: {
        "LOGIN" => settings['login'],
        "PASSWORD" => settings['password']
      },
      inline: <<-SHELL
      echo ****************SUBSCRIPTION**************
      echo --username=${LOGIN} --password=${PASSWORD}
      echo ****************SUBSCRIPTION**************

虽然 运行我得到:

--username=login --password=password

vars.yaml 文件如下所示:

---
login:myuser
password:mysecretpassword

我不知道哪里出了问题。欢迎任何点击。在 Windows 10 但在 git-bash 下执行的代码。文件 vars.yaml 已在 Windows 下编辑,但格式已从 Windnows (CR LF) 更改为 (Unix (LF)

您的 YAML 文件格式错误 - 冒号后缺少空格。正确的应该是:

---
login: myuser
password: mysecretpassword

修复它,您的代码应该可以工作。

您的代码中发生了什么?类似于以下内容:

  1. YAML 解析器将错误的 yaml 文件解析为 non-structured 字符串,因此您的 settings 变成类似于 "login:myuser password:mysecretpassword"(只是一个字符串)
  2. 对于字符串 [] 在某种程度上表现为模式匹配 - 它只是 returns 匹配的子字符串,如果有的话。看:
s = "login:myuser password:mysecretpassword"
s["login"] #=> "login"
s[/login/] #=> "login" # Yes, this works too
s["foo"] #=> nil