Ruby ARGV 与环境变量
命令行脚本经常需要接收参数和配置。Ruby 用 ARGV 读取命令行参数,用 ENV 读取环境变量。
ARGV 基础
创建 hello.rb:
hello.rb
name = ARGV[0] || "Ruby"
puts "Hello, #{name}"
运行:
ruby hello.rb Alice
ARGV 是数组:
p ARGV
运行:
ruby app.rb one two three
会看到参数数组。
参数校验
filename = ARGV[0]
unless filename
warn "usage: ruby app.rb <file>"
exit 1
end
puts File.read(filename)
warn 输出错误提示,exit 1 表示异常退出。
ENV 环境变量
port = ENV.fetch("APP_PORT", "8080")
puts "listen on #{port}"
运行:
APP_PORT=9000 ruby app.rb
环境变量常用于端口、运行模式、密钥路径等配置。
解析数字配置
ENV 读到的都是字符串:
port = ENV.fetch("APP_PORT", "8080").to_i
如果你需要严格校验,可以写:
port_text = ENV.fetch("APP_PORT", "8080")
port = Integer(port_text)
Integer("abc") 会抛出异常,比 to_i 更容易发现错误输入。
复杂 CLI 用 OptionParser
参数多起来后,不建议手写解析。Ruby 标准库提供 OptionParser:
require "optparse"
options = {}
OptionParser.new do |parser|
parser.on("-v", "--verbose", "Enable verbose output") do
options[:verbose] = true
end
end.parse!
p options
小练习
- 写一个脚本,从
ARGV读取文件名并输出内容。 - 使用
ENV.fetch读取APP_ENV,默认值为dev。 - 使用
Integer()解析端口,并处理非法输入。
小结
ARGV 表示本次命令行输入,ENV 表示运行环境配置。简单脚本可以手写解析,正式命令行工具应考虑 OptionParser 或专门 gem。