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

「here」が出力され、エラーは発生しません。-x と -Cの主な違いは、-x が#!/usr/bin/ruby行の前にあるものをすべて削除することです。また、-x を使用する場合は、ディレクトリを cd に設定する必要もありません。-x の主な目的は行を削除することであり、必要に応じて -C 機能も含まれているためです。

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

参照 (ruby --help)

  • -Cdirectory スクリプトを実行する前にディレクトリに移動します
  • -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

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 はエラーを報告します:は現在の LOAD_PATH にないcannot load such file -- myためです。./a

于 2013-01-11T09:28:11.643 に答える
2

-C および -X オプションは同じジョブを実行します (実行前にディレクトリを変更します)。違いはありません。

-I オプションは、$LOAD_PATH にパスを追加するために使用されます

例: my_lib ディレクトリ my_print_class.rb:(~/my_lib/my_print_class.rb) に my_print_class.rb という名前の ruby​​ ファイルがあるとします。

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 に答える