4

我对 Ruby 命令行选项感到困惑。两者都-C dir删除-X dir目录,但它们有何不同?

  • 与有何-x [dir]不同?-X dir
  • 做什么-I dir(我知道它添加dir为加载库的目录)?
4

3 回答 3

4

让我们在主目录中创建一个 test.rb 文件,内容如下:

hello
#!/usr/bin/ruby
p "here"

现在如果我们尝试运行它:

ruby -C /home/my_home test.rb

这意味着将工作目录更改为 /home/my_home 并运行 test.rb 你会得到一个错误:

test.rb:1:in `<main>': undefined local variable or method `hello' for main:Object (NameError)

如果我们运行它:

ruby -x /home/my_home test.rb

我们将打印“这里”并且没有错误。-x 和 -C 之间的主要区别在于 -x 删除了#!/usr/bin/ruby行前的所有内容。使用 -x 时,您也不必将目录设置为 cd。因为 -x 的主要目的是删除行,如果需要,它也只包含 -C 功能。

cd /home/my_home; ruby -x test.rb

见(红宝石--帮助)

  • -Cdirectory cd 到目录,在执行脚本之前
  • -x[directory] ​​去掉 #!ruby 行之前的文本,也许 cd 到目录

至于-I。您可以提供 ruby​​ 将搜索您执行或需要的文件的目录。

ruby -x test.rb

除非您位于 /home/my_home,否则 Ruby 将找不到 test.rb 文件。但是,如果您添加 -I ruby​​ 也会在“/home/my_home”中查找 test.rb。

ruby -x -I/home/my_home test.rb

与 -C 的不同之处在于它在执行之前不会更改目录,而只会在那里搜索文件。

于 2013-01-11T09:50:33.777 回答
2

-C 和 -X 选项执行相同的工作(执行前更改目录)。没有区别。

-I 选项用于将路径添加到 $LOAD_PATH

例如:假设您在 my_lib 目录 my_print_class.rb 中有名为 my_print_class.rb 的 ruby​​ 文件:(~/my_lib/my_print_class.rb)

class MyPrintClass
   def self.my_print(str)
     puts str
   end
end

现在你在 home(~) 中有 my_call.rb。

~/my_call.rb:

 require 'my_print_class'
 MyPrintClass.my_print("Hello world")

为此,您需要 my_print_class 的路径,因此您使用 ruby​​ -I my_lib my_call.rb

http://www.tutorialspoint.com/ruby/ruby_command_line_options.htm

于 2013-01-11T09:18:09.530 回答
2

正如您可以从man ruby或一些在线文档中看到的那样,-C并且-X是相同的。

并将-I向 ruby​​ LOAD_PATH 添加一些目录。例如,我有./a/my.rb和`./test.rb'这样的:

# ./a/my.rb
def hello
  puts 'hello from a/my'
end

# ./test.rb
require 'my'
hello       

我执行ruby -I ./a test.rb. 这将打印hello from a/my. 没有-I,ruby 会报错:cannot load such file -- my,因为./a不在当前的 LOAD_PATH 中。

于 2013-01-11T09:28:11.643 回答