2016-01-25 1 views
4

Je passe le script à ruby ​​via STDIN. E.g.,Comment passer les paramètres au script de ligne de commande ruby ​​

$ ruby << EE 
> puts "args: #{ARGV}" 
> EE 
args: [] 
$ ruby << EE 
> puts "args: #{ARGV}" 
> EE 'arg1' 'arg2' 
> EE 
-:2: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' 
EE 'arg1' 'arg2' 
    ^
$ ruby 'arg1' 'arg2' << EE 
> puts "args: #{ARGV}" 
> EE 
ruby: No such file or directory -- arg1 (LoadError) 
$ ruby -- 'arg1' 'arg2' << EE 
> puts "args: #{ARGV}" 
> EE 
ruby: No such file or directory -- arg1 (LoadError) 
$ ruby -e << EE 
> puts "args: #{ARGV}" 
> EE 
ruby: no code specified for -e (RuntimeError) 
$ 

Je ne sais pas comment passer les paramètres dans cette situation. L'option -e n'obtient pas ce qui est passé à STDIN. Selon man page, la syntaxe est:

ruby ... [--] [prog_file] [args] 

mais mon prog_file est sur STDIN.

Répondre

2

Comme beaucoup d'autres utilitaires Unix, ruby reconnaît - comme nom de fichier spécial pour STDIN:

$ echo "p ARGV" | ruby - foo bar 
["foo", "bar"] 

ou:

$ ruby - foo bar << EE 
> p ARGV 
> EE 
["foo", "bar"] 

ou: (en appuyant sur contrôleD pour mettre fin à l'entrée)

$ ruby - foo bar 
p ARGV 
["foo", "bar"] 
+0

Merci. Est-ce documenté quelque part? – Kashyap

+0

@Kashyap Je ne le trouve pas dans la documentation de Ruby, mais le livre de Pickaxe le mentionne dans [Ruby and Its World] (http://ruby-doc.com/docs/ProgrammingRuby/html/rubyworld.html) – Stefan

3

Vous pouvez transmettre des paramètres comme celui-ci

ruby << EE "" arg1 arg2 
> puts ARGV.inspect 
> EE 
# ["arg1", "arg2"] 

Le "" est un chemin de fichier rubis, ou dans ce cas - vide.

+1

Merci! Pouvez-vous expliquer la magie que '" "' fait? – Kashyap