`
fantaxy025025
  • 浏览: 1247495 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

【转】ruby_命令行参数介绍

阅读更多

命令行参数

“从命令行开始”。不管 Ruby 用在哪个系统上,无论是超级的科学工作站或者是嵌入式 PDA 设备,你无论如何都要从 Ruby 的解释器开始,这会给我们传递命令 行参数的机会。

Ruby 的命令行由三个部分组成: Ruby 解释器选项,可选的要运行程序的名 字,和可选的用于那个程序的一组参数。

ruby [ options ] [ -- ] [ programfile ] [ arguments ]

Ruby 选项是命令行直接跟在第一个单词后面 的,它不能用连字号,或特殊标志 --( 两个连字号 ) 开头。

如果命令行上未出现文件名,或如果文件名是单个连字号 (-) Ruby 从标准输入中读取程序源代码。

传递给程序本身的参数跟随在程序名字的后面。例如:

% ruby -w - "Hello World"

打开警告,从标准输入读取程序,并传递双引号字符串 "Hello World" 做为参数。

 

命令行选项

-0[octal] 0 标志 ( 数 字零 ) 指定记录的 分隔字符 ( ,如果 没有数字跟随 ) -00 指出段落模式:记录由两个连续的缺省 记录分隔字符分隔。 -0777 一次读入整个文件 ( 它像个非法字符 ) 。设置 $/

-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 。例如,假设 test.rb 包含了下面程序:

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 数组。

 

程序中止

方法 Kernel#exit 中止你的程序,并向操作系统返回一个状态值。虽然,不像一些语言, exit 不立即中止程序。 Kernel#exit 首先引发一个 SystemExit 异常,你可以捕获它, 然后程序执行一系列清除动作,包括运行所有的注册的 at_exit 方法和对象的 finalizer 。参考 500 页的 Kernel#exit 描述。

 

环境变量

你可以使用预定义的变量 ENV 来访问操作系统环境变量。它像哈希表一样响应一些方法。 [ENV 其实不是哈希表,但如果你需要的话, 你可以使用 ENV#to_hash ,来把它转换到成哈希表 ]

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 中显示的。

 

 

Table 14.1. Ruby 使用的环境变量

变量名称

描述

DLN_LIBRARY_PATH

用于搜索被动态加载的模块的路径。

HOME

指向用户的主目录。

LOGDIR

Fallback pointer to the user’s home directory if $HOME is not set. Used only by Dir.chdir.

OPENSSL_CONF

指定 OpenSSL 的本地配置文件。

RUBYLIB

Ruby 程序添加搜索路径 ($SAFE 必须被设置成 )

RUBYLIB_PREFIX (Windows only)

Mangle the RUBYLIB search path by adding this prefix to each component.

RUBYOPT

Ruby 添加命令行选项,在命令行选项并解析后进行检查 ($SAFE 必须设置成 0)

RUBYPATH

指定 –S 选项, Ruby 会搜索路径 ( 缺省值是 PATH)

RUBYSHELL

Shell to use when spawning a process under Windows; if not set, will also check SHELL or COMSPEC.

RUBY_TCL_DLL

Override default name for TCL shared library or DLL.

RUBY_TK_DLL

Override default name for Tk shared library or DLL. Both this and RUBY_TCL_DLL must be set for either to be used.

写入环境变量

Ruby 程序可以对 ENV 对象进行写操作。在大多数系统上这会 修改相应的环境变量的值。虽然,这种修改是本地的,只针对于这个进程或其随后的子进程。环境变量的种继承在下面例子中说明。一个子进程若修改了一个环境变 量,这个修改会被一个进程继承然后启动。尽管修改对原有的父进程不可见。 ( 这只是证明了它的父进程并不真的知道子进程再做什么。 )

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 在哪里找到的它的模块

你使用 require load 来使库模块添加到你的 Ruby 程序内。这些模块中一些应用于 Ruby ,一些你可以安装 Ruby 的应用程序文档 (RAA), 一些是你自己写。 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 对模块的搜索路径内。

 

P

P

P

+

P

P

P

 

 

分享到:
评论

相关推荐

    ruby-tm:命令行图灵机解释器

    Ruby图灵机描述这是一个打包成命令行工具的图灵机解释器。 我通过在网络上以我想要的方式轻松实现的大部分代码拼凑起来,然后添加一些额外的参数和选项。安装gem install ruby-tm用法在终端中运行tm以获得基本帮助。...

    clap:命令行参数解析

    拍简单应用程序的命令行参数解析。描述Clap 是一个可以与您的命令行应用程序捆绑在一起的小型库。 它涵盖了基于传递的标志或参数执行代码的简单情况。用法使用 Clap 很简单:只需传递ARGV和标志的散列,它就会根据...

    cukesparse:一个简单的命令行解析器,将参数传递给Cucumber

    Cukesparse解析命令行参数,并从config / task.yml文件设置默认参数。 例如,请在下面的示例配置中查看选项的完整列表: test_task: feature_order: ['features/featureOne', 'features/featureTwo', 'features/...

    Ruby脚本:面向命令行用户的Ruby脚本集合

    Ruby脚本的集合,适合那些住在命令行中的人。 股票查找器/货币转换器/天气/电影搜索 安装/设置 轻松将所有脚本安装为 gem install jake - scripts 库存搜索-返回当前库存信息 加密货币搜索-返回当前的加密货币价格...

    docopt.rb:仅从用法消息中解析命令行参数

    这是的ruby端口, 是最初用python编写的的选项解析器。 0.5.0版中的新功能: 如果重复(a-la ssh -vvv ),则对可重复的标志和命令进行计数。 带有参数的可重复选项将累积到列表中。 optparse和argparse如何根据...

    rumember:记住Milk Ruby API和命令行界面

    “Ruby API和命令行客户端。 命令行用法 此项目的唯一动机是从命令行捕获待办事项的快速方法。 因此,我选择了一个非常短的命令名称ru (通常我永远不会允许自己这样做)。 所有参数都用空格连接,并用于调用“记住...

    swift-auto-diagram:一个Ruby脚本,它扫描指定文件夹和文件中的所有swift代码并自动生成可在浏览器中查看的实体图(类似于类图)

    如果您未指定任何命令行参数,则脚本将在脚本的主目录中搜索所有swift文件。 您可以指定任意数量的命令行参数,这些参数应该是现有的目录或文件路径。 将以递归方式在目录中深度搜索快速文件。 教程: 注意: 该...

    RubyCheatSheet:熟悉 Ruby 的基本命令参考 ---Pure OOP!

    η规则读取 行政⇒ Ruby 有一个交互式命令行。 在终端中,输入irb 。 ⇒ 要查找您的 Ruby 版本,请输入ruby --version ; 或在 Ruby 脚本中: RUBY_VERSION # ⇒ 2.3.7# In general, use backtics `⋯` to call ...

    ruby-esgob:用于与 Esgob 任播 DNS API 通信的命令行工具和库

    安装使用以下命令将其安装为 gem: $ gem install esgob或者将此行添加到您的应用程序的 Gemfile 中: gem 'esgob' 然后执行: $ bundle命令行使用没有任何参数, esgob工具将显示命令列表: Commands: esgob ...

    applix:使用非常舒适的选项和参数预处理构建 ruby​​ 命令行应用程序

    构建命令行应用程序,例如: Defaults = { :verbose => false } Applix.main(ARGV, Defaults) do handle(:one) do |*args, opts| if opts[:verbose] puts "arguments: #{args.inspect}" puts "options: #{...

    java-gem:用于从 Java 包及其所有依赖项创建 Ruby Gem 的工具

    必需的命令行参数: -g, --group Java 库的Maven 组标识符 -n, --name Java 库的名称 -v, --version Java 库的版本 -u, --uber-gem 创建一个包含所有 Java 依赖项的 gem。 (构建瘦宝石有问题。) 可选的命令行...

    focused-web-search:在网站上搜索特定文本

    需要一个命令行参数作为搜索词 对于搜索播客档案有用 例子Ruby版本ruby focus_web_search.rb“ Windows防火墙” links.txt内容: Result: topic found in episode #1056 Java版本javac FocusedWebSearch.java java...

    CLAide:一个小的命令行界面框架

    您好,我是 Claide,您的命令行工具助手。 我出生于对简单选项和命令解析器的需求,同时仍然提供了一个API,可让您快速创建功能全面的命令行界面。 安装 $ [sudo] gem install claide 用法 有关 CLAide API 的完整...

    selenium-webdriver-2.24.0.gem

    安装ruby1.8.7或1.9.2。注意selenium-webdriver只支持1.8.7以上的ruby版本; 使用gem安装selenium-webdriver;打开命令行,输入下列代码完成安装。注意,如果你的开发环境需要http proxy的话,请注意在gem命令中...

    ferver:通过 HTTP 提供文件的 Ruby gem,打包为 Ruby gem

    Ferver = 文件服务器... $ gem install ferver用法您可以从任何目录运行ferver ,只需传入您想要提供文件的目录作为命令行参数,或者留空以使用当前目录。使用当前目录$ ferver使用特定目录例如,要从/Users/rob/Proj

    一个类工厂和dsl,用于快速生成命令行程序-Ruby开发

    名称main.rb概要说明用于生成命令行程序的类工厂和dsl真正的快速URI http://codeforpeople.com/lib/ruby/ http://rubyforge.org/projects/codeforpeople/ http://github.com/ ahoward / main INSTALL gem inst名称...

    cuke_commander:基于参数生成 Cucumber 命令行的 gem

    cuke_commander gem 提供了一种简单的编程方式来构建用于运行 Cucumber 的命令行。 安装 将此行添加到应用程序的 Gemfile 中: gem 'cuke_commander' 然后执行: $ bundle 或者自己安装: $ gem install cuke...

    ch_digest:ch_digest

    使用Ruby解释器(2.5.3或更高版本)运行文件ch_digest.rb ,并将源文件和目标文件路径作为命令行参数传递给它。 该程序仅使用Ruby Core和Standard Library组件,不需要安装任何其他gem。 测验 测试环境使用来确保...

    remote_syslog2:要安装,请参见“发布”选项卡。 自包含的守护程序,用于读取本地文件并发出远程syslog(不使用本地syslogd)

    remote_syslog2 remote_syslog包含一个或多个日志文件...尽管大多数命令行参数相同,但某些命令行参数的语法略有变化。 默认主机名已被删除。 host配置文件选项或-d调用标志都是必需的。 正在安装 适用于Mac(Darwin

    ClassBrowser:Ruby 类浏览器

    用法ClassBrowser 可以用命令行参数调用,或者,如果没有指定参数,ClassBrowser 将进入其交互模式。 在交互模式下,您可以重复输入与命令行相同的参数。 输入一个空行退出交互模式和程序。 用法:ClassBrowser ...

Global site tag (gtag.js) - Google Analytics