Ruby 命令行选项

Ruby 命令行选项中文讲解

Ruby 提供了一系列命令行选项,允许开发者在运行 Ruby 脚本时控制解释器的行为、调试程序、设置编码等。这些选项通过 ruby 命令后加参数指定,适用于所有支持 Ruby 的平台(Windows、Linux、macOS)。本文基于 Ruby 3.4.x(截至 2025 年 8 月的最新稳定版),详细讲解 Ruby 的常用命令行选项、用法及中文处理相关内容。


1. 基本命令行格式

Ruby 命令行的一般格式为:

ruby [选项] [脚本文件] [参数]
  • 选项:以 --- 开头的参数,控制 Ruby 解释器行为。
  • 脚本文件:要运行的 .rb 文件,若省略则从标准输入读取。
  • 参数:传递给脚本的参数,可在脚本中通过 ARGV 访问。

示例:

ruby -v script.rb arg1 arg2

2. 常用命令行选项

以下是 Ruby 的主要命令行选项,按功能分类,并包含中文相关说明:

2.1 基本信息与版本
  • -v, --version
  • 显示 Ruby 版本并退出。
  • 示例:
    bash ruby -v
    输出:ruby 3.4.0 (2025-XX-XX) [x86_64-linux]
  • -h, --help
  • 显示命令行选项帮助。
  • 示例:
    bash ruby -h
2.2 运行模式
  • -e '命令'
  • 直接执行指定的 Ruby 代码(无需脚本文件)。
  • 示例:
    bash ruby -e 'puts "你好,世界!"'
    输出:你好,世界!
  • 支持多行:
    bash ruby -e 'str = "你好"; puts str.upcase'
  • -r 库
  • 加载指定 Ruby 库(相当于 require)。
  • 示例:
    bash ruby -r pp -e 'pp({name: "中文"})'
    输出格式化哈希:{:name=>"中文"}
  • -I 路径
  • 添加库的加载路径(相当于 $LOAD_PATH)。
  • 示例:
    bash ruby -I ./lib script.rb
    ./lib 目录添加到加载路径。
2.3 编码相关选项

中文处理中,编码选项尤为重要,特别是在 Windows 或处理中文文件时:

  • -E外部:内部, --encoding 外部:内部
  • 设置外部和内部编码,格式为 外部[:内部]
  • 默认:外部编码为 Encoding.default_external(通常 UTF-8),内部编码为 nil
  • 示例(读取 GBK 文件,内部使用 UTF-8):
    bash ruby -EGBK:UTF-8 script.rb
  • 示例(强制 UTF-8):
    bash ruby -EUTF-8 script.rb
  • -U
  • 设置内部编码为 UTF-8。
  • 示例:
    bash ruby -U -e 'puts "你好".encoding'
    输出:UTF-8
  • -K 编码(已废弃):
  • Ruby 1.8 用于设置编码(如 -Ku 表示 UTF-8),在 2.x 及以上被 -E 取代。
2.4 调试与检查
  • -w
  • 启用警告模式,显示潜在问题(如未定义变量)。
  • 示例:
    bash ruby -w script.rb
    script.rb 中有问题,输出警告。
  • -d, --debug
  • 启用调试模式,设置 $DEBUG = true,适合调试复杂程序。
  • 示例:
    bash ruby -d script.rb
  • -c
  • 检查脚本语法是否正确,不执行。
  • 示例:
    bash ruby -c script.rb
    输出:Syntax OK(若无错误)。
  • -l
  • 自动为每行输出添加换行符(常用于文本处理)。
  • 示例:
    bash ruby -l -e 'print "你好"'
    输出:你好(自动换行)。
2.5 性能与优化
  • --jit
  • 启用 JIT(即时编译),提高性能(Ruby 3.x 引入)。
  • 示例:
    bash ruby --jit script.rb
  • -W级别
  • 控制警告级别:
    • -W0:无警告。
    • -W1:中等警告。
    • -W2:详细警告(等同 -w)。
  • 示例:
    bash ruby -W0 script.rb
2.6 脚本执行与环境
  • -n
  • 假设脚本在 while gets(); ... end 循环中,适合逐行处理输入。
  • 示例(打印每行并添加前缀):
    bash echo "你好\n世界" | ruby -n -e 'puts "行: #{$_}"'
    输出:
    行: 你好 行: 世界
  • -p
  • 类似 -n,但自动打印每行(相当于 puts $_)。
  • 示例(将输入转换为大写):
    bash echo "你好" | ruby -p -e '$_.upcase!'
    输出:你好
  • -a
  • -n-p 一起使用,自动将每行按空格分割为数组 $F
  • 示例:
    bash echo "你好 世界" | ruby -a -n -e 'puts $F[0]'
    输出:你好
  • -F 模式
  • 指定字段分隔符(与 -a 配合)。
  • 示例:
    bash echo "你好,世界" | ruby -F',' -a -n -e 'puts $F[0]'
    输出:你好

3. 中文相关注意事项

中文处理常涉及编码问题,命令行选项可帮助解决:

  1. 中文乱码
  • Windows:CMD 默认使用 GBK,可能导致乱码。设置 UTF-8:
    bash chcp 65001 ruby -EUTF-8 script.rb
  • 脚本中显式设置输出编码:
    ruby # encoding: UTF-8 $stdout.set_encoding("UTF-8") puts "你好,世界!"
  • 使用 PowerShell 或 Windows Terminal,天然支持 UTF-8。
  1. 文件编码
  • 读取中文文件时指定编码:
    bash ruby -EUTF-8 -e 'puts File.read("chinese.txt", encoding: "UTF-8")'
  • 处理 GBK 文件:
    bash ruby -EGBK:UTF-8 script.rb
  1. 命令行参数中的中文
  • 传递中文参数:
    bash ruby script.rb 你好 世界
    脚本示例:
    ruby # encoding: UTF-8 ARGV.each { |arg| puts "参数: #{arg}" }
  • 确保终端支持 UTF-8,否则中文参数可能乱码。

4. 示例:结合命令行选项处理中文

  1. 逐行处理中文输入
   echo "你好\n世界" | ruby -n -EUTF-8 -e 'puts "处理: #{$_}"'

输出:

   处理: 你好
   处理: 世界
  1. 检查中文脚本语法
   # script.rb
   # encoding: UTF-8
   puts "你好,世界!"

检查:

   ruby -c -EUTF-8 script.rb

输出:Syntax OK

  1. 调试中文程序
   # debug.rb
   # encoding: UTF-8
   str = "你好"
   puts str.reverse

运行:

   ruby -d -EUTF-8 debug.rb
  1. 快速执行中文输出
   ruby -EUTF-8 -e 'puts "中文测试".reverse'

输出:试测文中


5. 进阶用法

  • 结合 Rails
  • 运行 Rails 服务器并指定编码:
    bash rails server -EUTF-8
  • 检查 Rails 脚本语法:
    bash ruby -c -EUTF-8 app/controllers/application_controller.rb
  • 批量处理文件
  • 处理目录中所有 .txt 文件:
    bash ruby -EUTF-8 -e 'Dir["*.txt"].each { |f| puts File.read(f, encoding: "UTF-8") }'
  • 调试复杂程序
  • 使用 pry 结合 -r
    bash ruby -r pry -EUTF-8 script.rb

6. 常见问题与解决

  1. 中文乱码
  • 原因:终端、文件或 Ruby 编码不一致。
  • 解决
    • 确保脚本声明 # encoding: UTF-8
    • 使用 -EUTF-8chcp 65001(Windows)。
    • 检查文件保存编码(推荐 UTF-8 无 BOM)。
  1. 选项冲突
  • 某些选项(如 -n-e)可能不兼容,检查帮助:
    bash ruby -h
  1. 性能问题
  • 启用 JIT:
    bash ruby --jit script.rb
  • 禁用警告以提高速度:
    bash ruby -W0 script.rb

7. 注意事项

  • 编码优先级:命令行选项(如 -E)优先于脚本内声明。
  • Windows 特殊性:CMD 的编码问题需特别注意,推荐 PowerShell 或 Windows Terminal。
  • 版本兼容性:Ruby 2.x 及以上对编码支持更完善,推荐 3.4.x。
  • 社区资源
  • Ruby 官方文档(ruby-doc.org)
  • Ruby China(ruby-china.org)
  • Stack Overflow 的 Ruby 标签。

通过以上讲解,你可以熟练使用 Ruby 命令行选项处理中文脚本和相关任务。如果需要针对特定选项、场景(如 Rails 或批量处理)或问题的深入指导,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注