`
wuhuizhong
  • 浏览: 668502 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

Ruby 调用Shell脚本

    博客分类:
  • ROR
 
阅读更多

 

// 第一种 用反引号将shell命令引起来,如果是shell脚本可写上绝对路径(总之就是可以直接运行的)
ipinfo=`ifconfig`
puts ipinfo

// 第二种 用system函数来实现
system 'echo "hello $HOSTNAME"'

// 第三种 用IO类的popen方法
IO.popen("date") { |f| puts f.gets }

// 第四种 用Ruby标准库open3中的方法
require "open3"
stdin, stdout, stderr = Open3.popen3('date')
stdin.puts('')
stdout.gets
stderr.gets

六种用ruby?用?行shell命令的方法:

http://blackanger.blog.51cto.com/140924/43730

 

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"
  >> $?
  => #<Process::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')
  => [#<IO:0x6e5474>, #<IO:0x6e5438>, #<IO:0x6e53d4>]
  >> 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, #<IO:0x6dff24>, #<IO:0x6dfee8>, #<IO:0x6dfe84>]
  >> $?
  => nil
  >> pid
  => 26327
  >> ignored, status = Process::waitpid2 pid
  => [26327, #<Process::Status: pid=26327,exited(1)>]
  >> status.to_i
  => 256

 

 

 

 

分享到:
评论

相关推荐

    Ruby中调用执行shell命令的6种方法

    碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法: 1.Exec方法: Kernel#exec方法通过调用指定的命令取代当前进程例子: 代码如下:  $ irb  &gt;&gt; exec ‘echo “hello $HOSTNAME”‘  ...

    Ruby中执行Linux shell命令的六种方法详解

    这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令。 exec exec会将指定的命令替换掉当前进程中的操作,指定命令结束后,进程结束。 代码如下: exec ‘echo “hello world”‘ print ‘abc’ ...

    Pragmatic - From Java to Ruby jun 2006

    Ruby也许是一个脚本语言改进的榜样,也许又一种面向对象的脚本的Show,也许是大家尝试新技术的一种热情,,但真的让我Fram java to Ruby ,理由太薄弱的,即便的确挺好玩的。 看来,用语言,有时候还看场景。。Java会...

    rexe:可配置的Ruby命令行过滤器,格式转换器和执行器

    Shell脚本非常适合简单的任务,但是对于任何琐碎的事情,它很容易变得晦涩难懂(双关语!)。 通常可以通过编写Ruby脚本来解决此问题。 Ruby以一种清晰,简洁和表现力强的语言提供细粒度的控制。 不幸的是,当要...

    personal-blog:断言不是魔术是我的个人博客。 我写信要记住我学到的东西,也帮助人们学习它

    这也是我针对HTML,CSS,JavaScript,Sass,Ruby,Shell脚本,JAM堆栈,API交互,Vue等的测试/实践基础。 我在上面写东西是因为我喜欢写东西,我需要写下来以后记住它们,希望我写下来的东西对其他人有帮助。 概述 ...

    groovy-官网翻译.docx

     对OO(面向对象编程)和Ant DSL 支持更好,在语法层面支持编写、编译shell脚本  减少结构性代码。开发web/GUI/Console程序,效率更高  简化单元testing and mocking  与Java无缝集成,互相调用  与Java...

    sla:简单的小自动化器

    这是一个很小的shell脚本,它调用项目根目录中build.sla脚本中的shell函数。 对于较小的项目和不需要编译的项目(例如脚本语言),它是理想的选择。 为什么? 我研究的每个任务运行/构建系统要么针对特定语言,...

    scripts-to-rule-them-all:全部统治的脚本

    这样,可以从其他脚本中调用它们。 这不仅清理了很多重复的工作,还意味着贡献者可以做他们需要做的事情,而无需对项目的运作有广泛的基础知识。 像这样降低摩擦是更快,更快乐的贡献的关键。 以下是脚本及其主要...

    JSP API接口和返回的版本

    目前所有版本的JS JSP ASP .NET J2AM 都是提供源代码的,对于一些脚本语言来说,直接解压缩之后就可以使用了,不需要什么安装步骤。另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 ...

    Vebugger:交互式 shell 调试器的前端

    JDB - Java 调试器Mdbg - .NET 调试器(仅限 Windows) PDB - 用于调试 Python 脚本的 Python 模块RDebug - 用于调试 Ruby 脚本的 Ruby 命令行选项其他实现可以轻松添加,我会接受添加此类实现的拉取请求,只要它们...

    Linux C程序设计大全

    第1篇 Linux下C语言基础 第1章 Linux简介 1.1 GNU简介 1.2 Linux简介 1.2.1 Linux发展史 1.2.2 Linux发行版 1.2.3 Linux内核版本 1.2.4 Linux与UNIX的关系 1.2.5 Linux在服务器方面...第28章 shell脚本中的控制结构 844

    一款好用的后端开发调试接口工具Apifox,功能十分强大。

    API 文档设计 可视化 API 文档管理,零学习成本。...支持调用 javascript、java、python、php、js、BeanShell、go、shell、ruby、lua 等语言代码。 数据库操作 支持读取数据库数据,作为 API 请求参数使用。

    initenv:初始化OSX开发环境的脚本

    scripts/packages.txt 酿造木桶包装: scripts/packages-cask.txt 设置JAVA_HOME 安装ruby和关键的git脚本快速开始打开init.sh并编辑配置配置文件RUBY_VERSION 调用$ sh init.sh 注意: homebrew有时会要求您在安装...

    pianodora:Go 管理 Pianobar 的项目

    我们的用例是 Raspberry Pi,之前我们有一个 Ruby 脚本发布 Hipchat 通知。 在 Ruby VM 启动、脚本发出 HTTP 请求然后终止的歌曲之间存在明显的延迟。 该项目背后的想法是让客户端能够快速启动以与持续运行的守护...

    SplitVideo:Python生成并执行appleScript将长视频分割成csv文件控制下的命名片段

    分割视频 Python生成并执行appleScript将长视频分割成csv文件控制下的命名... 编辑:添加了一个更简单的 shell 脚本,它调用 ffmpeg 并使用 ruby​​ 助手来计算时间戳差异。 由于某种原因,原版停止在优胜美地工作,我

    penetration-tester:扫描开放端口并在不应该开放的端口时发送邮件

    这个小小的 ruby​​ 脚本使用nmap来扫描主机的开放端口,并将发现的开放端口与允许的开放端口列表进行比较。 如果发现打开的端口不在允许的开放端口列表中,它会发送邮件。 定期对您的服务器运行以检查防火墙是否...

    java开源包1

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    streem:基于流的编程语言的原型

    它基于类似于shell的编程模型,并受Ruby,Erlang和其他功能编程语言的影响。 注意: Streem仍处于设计阶段。 它还没有工作。 敬请关注。编译中安装依赖项野牛柔性gcc / c运行make make例子在Streem中,一个简单的...

    ASP API接口和返回的版本

    目前所有版本的JS JSP ASP .NET J2AM 都是提供源代码的,对于一些脚本语言来说,直接解压缩之后就可以使用了,不需要什么安装步骤。另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 ...

    PHP API接口和返回的版本

    目前所有版本的JS JSP ASP .NET J2AM 都是提供源代码的,对于一些脚本语言来说,直接解压缩之后就可以使用了,不需要什么安装步骤。另外一些需要编译的语言,则提供了编译用的 shell 文件(Linux/Unix 下使用)和 ...

Global site tag (gtag.js) - Google Analytics