ruby脚本调用linux环境变量,Ruby中调用执行shell命令的6种方法

碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法:

1.Exec方法:

Kernel#exec方法通过调用指定的命令取代当前进程例子:

复制代码 代码如下:

$ irb

>> exec 'echo "hello $HOSTNAME"'

hello nate.local

$

值得注意的是,exec方法用echo命令来取代了irb进程从而退出了irb。主要的缺点是,你无法从你的ruby脚本里知道这个命令是成功还是失败。

2.System方法

Kernel#system方法操作命令同上, 但是它是运行一个子shell来避免覆盖当前进程。如果命令执行成功则返回true,否则返回false。

复制代码 代码如下:

$ irb

>> system 'echo "hello $HOSTNAME"'

hello nate.local

=> true

>> system 'false'

=> false

>> puts $?

256

=> nil

>>

3.反引号(Backticks,Esc键下面那个键)

复制代码 代码如下:

$ irb

>> today = `date`

=> "Mon Mar 12 18:15:35 PDT 2007n"

>> $?

=> #<:status: pid="25827,exited(0)">

>> $?.to_i

=> 0

这种方法是最普遍的用法了。它也是运行在一个子shell中。

4.IO#popen

复制代码 代码如下:

$ irb

>> IO.popen("date") { |f| puts f.gets }

Mon Mar 12 18:58:56 PDT 2007

=> nil

5.open3#popen3

复制代码 代码如下:

$ irb

>> stdin, stdout, stderr = Open3.popen3('dc')

=> [#<0x6e5474>, #<0x6e5438>, #<0x6e53d4>]0x6e53d4>0x6e5438>0x6e5474>

>> stdin.puts(5)

=> nil

>> stdin.puts(10)

=> nil

>> stdin.puts("+")

=> nil

>> stdin.puts("p")

=> nil

>> stdout.gets

=> "15n"

6.Open4#popen4

复制代码 代码如下:

$ irb

>> require "open4"

=> true

>> pid, stdin, stdout, stderr = Open4::popen4 "false"

=> [26327, #<0x6dff24>, #<0x6dfee8>, #<0x6dfe84>]0x6dfe84>0x6dfee8>0x6dff24>

>> $?

=> nil

>> pid

=> 26327

>> ignored, status = Process::waitpid2 pid

=> [26327, #<:status: pid="26327,exited(1)">]

>> status.to_i

=> 256

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值