`
fantaxy025025
  • 浏览: 1330844 次
  • 性别: 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-命令行实用程序来配置Swift项目的编译时间

    利用这些工具,我们可以创建一个名为`xcprofiler`的CLI,它能接收命令行参数,例如项目路径、配置选项等,然后进行以下操作: 1. **分析编译时间**:`xcprofiler`可以连接到Xcode的构建系统,记录每个目标的编译...

    自动RFSDR信号分析[逆向工程]_Ruby_下载.zip

    3. 自动化分析:通过Ruby的元编程特性,可以创建动态的分析框架,根据信号特征自动调整分析参数,提高效率。 4. 解码和解调:对于加密或未知的通信协议,逆向工程的目标是解码信号。Ruby可以实现解码算法,从原始...

    这个工具下载、安装和配置一个崭新的Chromium副本。_HTML_Ruby_下载.zip

    通过命令行界面执行此脚本,传入可能的参数,如目标目录、Chromium版本等。 4. **下载Chromium**:工具将自动从Chromium的官方仓库或指定的源下载最新的源代码。这可能需要较长时间,因为Chromium的源代码非常庞大...

    基于Ruby编写的命令行注入版本.zip

    7. **利用Gem库**:使用像`Commander`或`GLI`这样的库来更安全地处理命令行参数,它们通常会自动处理一些安全性问题。 8. **代码审计和测试**:定期进行代码审计和安全测试,确保新添加的功能不会引入新的注入漏洞...

    Ruby-TrollopRuby的一个命令行选项解析器

    在开发命令行界面(CLI)工具时,Trollop提供了一种简洁的方法来处理用户输入的参数和选项,使得开发者能够专注于应用程序的核心功能,而不是花费大量时间在解析命令行参数上。 Trollop的工作原理是通过定义一组...

    intro_to_ruby_launch:启动学校的Ruby练习入门

    Ruby支持传入参数,并且可以使用默认值、可变数量的参数以及块作为参数。 4. **类和对象**: Ruby是纯面向对象的语言,一切皆为对象。`class`关键字用来定义类,类是对象的蓝图,包含属性(实例变量)和行为(方法...

    trollop:Ruby 的命令行选项解析器

    在Ruby编程语言中,处理命令行参数是一项常见的任务,特别是在构建命令行工具或者脚本时。trollop是一个非常实用的库,专门用于解析命令行选项,它使得在Ruby程序中处理命令行输入变得简单而直观。trollop库提供了...

    Ruby-将Ruby变成一个多功能命令行实用程序

    通过以上步骤,我们可以构建一个功能丰富的Ruby命令行工具。Ruby的生态系统提供了许多库和工具,如`Thor`, `Slop`, 或者`GLI`,它们可以帮助我们更高效地构建CLI工具,提供更复杂的命令结构和更友好的用户界面。不断...

    Ruby-RDoc用于为Ruby项目生成HTML和命令行文档

    Ruby-RDoc是Ruby编程语言中一个非常重要的工具,主要用于生成项目的HTML和命令行文档。它使得开发者能够方便地创建清晰、结构化的代码注释,进而自动生成易于理解的API文档,帮助其他开发者理解和使用项目。在Ruby...

    Ruby-Cocaine用于在Ruby代码中执行命令行的库

    1. **命令行构造**:你可以通过字符串或数组传递命令行参数。字符串形式如`"ls -l"`,数组形式如`["ls", "-l"]`。这种灵活性使得构建复杂命令变得简单。 2. **工作目录设置**:你可以指定命令执行时的工作目录,...

    Ruby-CommanderRuby命令行可执行文件的完整解决方案

    Ruby-Commander是一个强大的工具,用于构建Ruby命令行界面(CLI)应用程序。它提供了一种简洁、高效的途径,使得开发者可以快速地创建出用户友好的命令行接口,从而提高生产力和用户体验。在Ruby社区中,Commander是...

    Ruby-TorS一个命令行的torrent搜索应用

    1. **命令行参数处理**:Ruby的`OptionParser`库或`ARGV`全局数组可以帮助解析命令行参数,根据用户提供的选项进行相应操作。 2. **HTTP请求与解析**:为了与torrent搜索引擎交互,需要使用如`Net::HTTP`库发送HTTP...

    ruby脚本交互.rar

    1. **Ruby脚本交互**: Ruby提供了多种方式进行脚本交互,包括命令行参数、标准输入/输出、文件操作和网络通信等。通过命令行参数,我们可以传递参数给Ruby脚本并在脚本内部处理。标准输入/输出则允许脚本与用户或...

    Ruby-一个Ruby的例子

    即使是在“其它杂项”中,也有许多值得关注的工具,如用于处理文件系统的`File`和`Dir`类,或者用于处理命令行参数的`ARGV`数组。 在压缩包`RubyDemo_First-master`中,我们可以假设这是一个简单的Ruby项目,可能...

    rubyonrails

    Ruby on Rails(简称Rails)是一种基于Ruby编程语言的开源Web应用程序框架,它遵循Model-View-Controller(MVC)架构模式。Rails强调“约定优于配置”(Convention over Configuration)和“Don't Repeat Yourself”...

    Programming Ruby 1.9 3rd edition

    - **命令行参数**:Ruby程序可以从命令行接收参数,这对于编写脚本或命令行工具非常有用。通过解析命令行参数,程序可以根据用户提供的输入执行不同的任务。 #### 四、结论 《Programming Ruby 1.9》是一本全面...

    Ruby-GLI类似Git接口的命令行解析器

    Ruby-GLI是一个强大的命令行接口(CLI)构建工具,设计灵感来源于Git的命令行结构。这个库使得开发者能够轻松创建具有多级命令和选项的复杂命令行应用程序,类似于Git命令行的使用体验。GLI的目标是简化CLI的创建...

    Ruby-Ru将Ruby的表现力清洁和可读性引入命令行

    在标题和描述中提到的"Ruby-Ru将Ruby的表现力、清洁和可读性引入命令行",这意味着我们要讨论的是一个名为"Ru"的工具或库,它旨在改善命令行界面(CLI)的用户体验,利用Ruby的特性来创建更易于理解和使用的命令行...

    Ruby语言笔记包括简介、主要特性、命令行选项、环境变量、基础语法等

    ### Ruby语言概述 #### 一、Ruby语言简介 Ruby是一种纯粹的面向对象的编程...通过了解Ruby的基本概念、主要特性和如何通过命令行进行配置,开发者可以更好地利用这种语言的强大功能,构建高效、可维护的应用程序。

Global site tag (gtag.js) - Google Analytics