我对Ruby命令行选项感到困惑。 -C dir
和-X dir
都删除了目录,但它们之间的区别如何?
-x [dir]
与-X dir
的区别如何?-I dir
做什么(我知道它添加了dir
作为加载库的目录)?答案 0 :(得分: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
见(ruby --help)
至于-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的不同之处在于它在执行前不会更改目录,而只会在那里搜索文件。
答案 1 :(得分:2)
-C和-X选项执行相同的任务(在执行前更改目录)。没有区别。
-I选项用于添加$ LOAD_PATH
的路径例如:假设您在my_lib目录中有一个名为my_print_class.rb的ruby文件 my_print_class.rb:(〜/ my_lib / my_print_class.rb)
class MyPrintClass
def self.my_print(str)
puts str
end
end
现在你家里有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
答案 2 :(得分: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中。