锁定老帖子 主题:第三章、ruby命令行参数介绍
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-03
命令行参数
Ruby的命令行由三个部分组成:Ruby解释器选项,可选的要运行程序的名字,和可选的用于那个程序的一组参数。 ruby [ options ] [ -- ] [ programfile ] [ arguments ] Ruby选项是命令行直接跟在第一个单词后面的,它不能用连字号,或特殊标志--(两个连字号)开头。 如果命令行上未出现文件名,或如果文件名是单个连字号(-),Ruby从标准输入中读取程序源代码。 传递给程序本身的参数跟随在程序名字的后面。例如: % ruby -w - "Hello World" 打开警告,从标准输入读取程序,并传递双引号字符串"Hello World"做为参数。
命令行选项
-a 当使用-n或-p时的自动分离模式,等价于在每个循环迭代器上执行$F = $_.split。 -C directory 在运行之前修改工作路径。 -c 只检查符号,不运行程序。 -copyright 打印版权信息并退出。 -d, -debug 设置 $DEBUG 和 $VERBOSE 为 true。这可以用于你的程序的额外追踪。 -e 'command' 执行做为一行Ruby源码的命令。允许几个-e,在同一程序中命令被视做多行。当-e出现时,如果程序文件被忽略,在-e命令被运行完后中止运行。程序运行时使用-e可访问旧的条件中的范围和正则表达式的行为-整数范围比较当前输入行号,正式表达式匹配$_。 -F pattern 指定用于split()的缺省输入字段分隔符($;)(影响-a选项)。 -h, -help 显示一个简短的帮助屏幕。 -I directories 指定预定义的$LOAD_PATH($:)指令。可以有多个-I选项。每个-I后可有多个用冒号:分隔的指令。在类Unix系统上是分号(;)。 -i[extension] 以替换形式编辑ARGV文件。ARGV内的每个文件名,你写入到标准输出的任何东西,都将被回储到那个文件的内容中。如果有扩展名的话,备份文件会被保留下来。 % ruby -pi. bak –e "gsub(/Perl/, 'Ruby')" *.txt -K kcode 指定要使用的编码。当Ruby使用日语时这个选项很有用。Kcode可以是这些当中的一个: e, E for EUC; s, S 对应 SJIS; u, U 对应 UTF-8; or a, A, n, N 对应 ASCII. -l 自动进行行尾处理;设置$的值为$/,并且对读入的行自动地进行String#chop!处理。 -n Assumes a while gets; ...; end loop around your program. For example, a simple grep command could be implemented as % ruby –n –e "print if /wombat/" *.txt -p Places your program code within the loop while gets; ...; print; end. % ruby –p –e "$_.downcase!" *.txt -r library 在运行前请求给出名字的库。 -S 查看程序文件是否使用了RUBYPATH或PATH环境变量。 -s Any command-line switches found after the program filename, but before any filename arguments or before a , are removed from ARGV and set to a global variable named for the switch. In the following example, the effect of this would be to set the variable $opt to "electric". % ruby -s prog -opt= electric ./mydata -T[level] 设置安全级别,执行不纯度测试(见379页)。设置$SAFE。 -v, -verbose 设置$VERBOSE为true,打开冗长模式。也打印版本号。在冗长模式中,可打印编译警告。如果命令行上没有指定文件名,则Ruby退出。 --version 显示Ruby的版本信息并退出。 -w 打开冗长模式。与-v不同,如果命令行上没有指定文件名则从标准输入读入程序。我们推荐带 –w 来运行你程序。 -W level 设置警告的级别。可有一个或两个级别(或者没指定级别),等价于-w—给出额外的警告。如果级别为1,运行在标准(缺省)警告级别上。使用-W0则不显示警告(包括使用Kernel.warn的警告)。 -X directory 在运行前更改工作目录。类似于-c directory 。 -x [directory] 从#!Ruby行取出文本,如果指定目录的话,并且要修改工作目录。 -y, -yydebug 在解析器中打开yacc调试器。
ARGV
ARGV.each {|arg| p arg } 用下同命令行调用它: % ruby –w test.rb "Hello World" a1 1.6180 会产生如下输出: "Hello World" "a1" "1.6180" 这是给C程序员准备的—ARGV[0]是传递给程序的第一个参数,不是程序的名字。当前程序的名字是全局变量$0中的变量。注意ARGV的所有值都是字符串。 如果你的程序试图从标准输入来读(或使用特殊文件ARGF,它 321页描述),ARGV内的程序参数将接受文件名,并且Ruby会从这些文件中读入。如果你程序带有混合参数和文件名,确信你在从文件读之前倾空了ARGV数组。
程序中止
环境变量
ENV['SHELL'] => "/bin/sh" ENV['HOME'] => "/Users/dave" ENV['USER'] => "dave" ENV.keys.size => 34 ENV.keys[0, 7] => ["MANPATH", "TERM_PROGRAM", "TERM", "SHELL", "SAVEHIST", "HISTSIZE", "MAKEFLAGS"] 当Ruby首次启动时要读取一些环境变量值。这些变量修改解释程序的行为,像表14.1中显示的。
写入环境变量
puts "In parent, term = #{ENV['TERM']}" fork do puts "Start of child 1, term = #{ENV['TERM']}" ENV['TERM'] = "ansi" fork do puts "Start of child 2, term = #{ENV['TERM']}" end Process.wait puts "End of child 1, term = #{ENV['TERM']}" end Process.wait puts "Back in parent, term = #{ENV['TERM']}" produces: In parent, term = xtermcolor Start of child 1, term = xtermcolor Start of child 2, term = ansi End of child 1, term = ansi Back in parent, term = xtermcolor
Ruby在哪里找到它的模块
当Ruby构建你的特殊机器时,它会预先确定持有库资料的标准目录。这些依赖于机器。你可以像这样在命令行中确定它们 % ruby –e 'puts $:' 在典型的Linux box 上,你或许会找到一些如下面显示的。注意Ruby1.8中,这些目录的次序已被修改—下面目录依赖于它们的机器。 /usr/local/lib/ruby/site_ruby/1.8 /usr/local/lib/ruby/site_ruby/1.8/i686linux /usr/local/lib/ruby/site_ruby /usr/local/lib/ruby/1.8 /usr/local/lib/ruby/1.8/i686linux site_ruby目录持有模块和你添加扩展的模块。依赖于系统的目录(本例中是i686-linux)持有可运行的和其它指定给此机器的。所有这些目录被自动地包含在Ruby对模块的搜索路径内。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 8049 次