解析 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
修复它,您的代码应该可以工作。
您的代码中发生了什么?类似于以下内容:
- YAML 解析器将错误的 yaml 文件解析为 non-structured 字符串,因此您的
settings
变成类似于 "login:myuser password:mysecretpassword"
(只是一个字符串)
- 对于字符串
[]
在某种程度上表现为模式匹配 - 它只是 returns 匹配的子字符串,如果有的话。看:
s = "login:myuser password:mysecretpassword"
s["login"] #=> "login"
s[/login/] #=> "login" # Yes, this works too
s["foo"] #=> nil
我根本不知道 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
修复它,您的代码应该可以工作。
您的代码中发生了什么?类似于以下内容:
- YAML 解析器将错误的 yaml 文件解析为 non-structured 字符串,因此您的
settings
变成类似于"login:myuser password:mysecretpassword"
(只是一个字符串) - 对于字符串
[]
在某种程度上表现为模式匹配 - 它只是 returns 匹配的子字符串,如果有的话。看:
s = "login:myuser password:mysecretpassword"
s["login"] #=> "login"
s[/login/] #=> "login" # Yes, this works too
s["foo"] #=> nil