我对 Ruby 命令行选项感到困惑。两者都-C dir
删除-X dir
目录,但它们有何不同?
- 与有何
-x [dir]
不同?-X dir
- 做什么
-I dir
(我知道它添加dir
为加载库的目录)?
我对 Ruby 命令行选项感到困惑。两者都-C dir
删除-X dir
目录,但它们有何不同?
-x [dir]
不同?-X dir
-I dir
(我知道它添加dir
为加载库的目录)?让我们在主目录中创建一个 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
见(红宝石--帮助)
至于-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 的不同之处在于它在执行之前不会更改目录,而只会在那里搜索文件。
-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
正如您可以从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 中。