实践是检验真理的唯一标准,下面用win7做个实验

1.exec命令

代码:

1 cmd = exec("echo 'hello'")
2 puts '-' * 20
3 p cmd

结果:

分析:

exec执行完程序就不继续往下执行了,而且会把执行结果打印出来,可能执行exec完程序就退出了。

再执行一个错误的命令测试

代码:

1 cmd = exec("echoo 'hello'")
2 puts '-' * 20
3 p cmd

结果:

分析:

把执行结果打印出来,程序报错。

2.system命令

代码:

1 cmd = system "echo 'hello'"
2 puts '-' * 20
3 p cmd

结果:

分析:

和exec一样,把命令执行结果打印出来,和exec不同的是,执行完后不会退出程序,返回TrueClass对象,然后会继续执行下面的代码。

再执行一个错误的命令测试

代码:

1 cmd = system "echoo 'hello'"
2 puts '-' * 20
3 p cmd

结果:

分析:

执行错误命令不会报错,返回NilClass对象,然后继续执行后面代码。

3.%x{}

代码:

1 cmd = %x{echo 'hello'}
2 puts '-' * 20
3 p cmd

结果:

分析:

不会打印执行结果,返回值是String对象,返回的结果是命令执行的结果,会继续执行后面的代码。

再执行一个错误的命令测试

代码:

1 cmd = %x{echoo 'hello'}
2 puts '-' * 20
3 p cmd

结果:

分析:执行错误的命令或导致程序报错。

4.采用``

1 cmd = `echo 'hello'`
2 puts '-' * 20
3 p cmd

成功和失败的执行结果和%x{}一样,应该是%x{}的简写。

总结:

用exec可以执行终端命令,命令会被执行,命令执行成功后面的代码就不再继续执行了,命令执行失败,程序会报错。

用system执行终端命令,命令会被执行,命令执行成功返回true,命令执行失败返回nil,代码会继续往下执行。

用%x{}执行终端命令,命令会被执行,命令执行成功返回执行结果(String对象),命令执行失败程序会报错。

如果分析有误,希望高手指摘。

转载于:https://www.cnblogs.com/wwb0111/p/3246221.html

ruby中exec,system,%x的区别相关推荐

  1. SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 原文:SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语 ...

  2. 在Ruby中获取system()调用的输出

    本文翻译自:Getting output of system() calls in Ruby 如果我在Ruby中使用Kernel#system调用命令,我该如何获得它的输出? system(" ...

  3. ruby中uniq和uniq!的区别

    uniq不会改变数组本身,而uniq!会直接修改数组,且uniq如果找到重复元素,则返回去重的数组,否则返回nil(这里比较容易理解错误而踩坑) a = [5,2,2,5,3]a.uniq # [5, ...

  4. SQL Server 中 EXEC全称execute 与 SP_EXECUTESQL动态执行sql代码语句 的区别

    先睹为快 use cplvfx_DBdeclare @sqlStr nvarchar(max)set @sqlStr='select top 100 * from User'exec (@sqlStr ...

  5. Ruby中的require_relative和require有什么区别?

    本文翻译自:What is the difference between require_relative and require in Ruby? Ruby中的require_relative和re ...

  6. Python中eval与exec的使用及区别

    最近开发中用到了eval()与exec()这两个函数,不知道在哪种场景下用哪个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数的区别 1.eval函数 函数的作用: 计算指定表达式的 ...

  7. shell和php区别,PHP中exec函数和shell_exec函数的区别

    这篇文章主要介绍了PHP中exec函数和shell_exec函数的区别,这两个函数是非常危险的函数,一般情况都是被禁用的,当然特殊情况下也会使用,需要的朋友可以参考下 这两个函数都是执行Linux命令 ...

  8. Oracle中sys和system用户的区别

    Oracle中sys和system用户的区别 1.数据库的启动需要以SYSDBA/SYSOPER身份登录. 2.如果在同一主机上使用IPC连接到数据库使用操作系统授权,登录任何一个用户都可以拥有as ...

  9. ruby 集合 分组_在Ruby中找到两个集合之间的区别

    ruby 集合 分组 Finding differences simply means that finding elements that are uncommon between two sets ...

最新文章

  1. zabbix系列(四)Zabbix3.0.4添加对Nginx服务的监控
  2. [Ray Linn]用Visual Studio 2008开发IE BHO(浏览器帮助对象) 之二
  3. 四元数c语言,C + OpenGL四元数
  4. 施一公“开学第一课”金句频出!这堂硬核公开课讲了啥?
  5. dev控件swiftplot图滚动方法_无限轮播图使用Scroller就这么简单
  6. 【源码】2012年斗地主算法大全
  7. JavaFX布局中图片在表格中无法被自适应缩小?
  8. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
  9. 基于JAVA+Servlet+JSP+MYSQL的员工报销管理系统
  10. python读取HDF5数据
  11. 你真的懂Linux吗?Linux运维从业方向与前景
  12. matlab与焓湿图,焓湿图的纵坐标与横坐标的夹角为( )。
  13. matlab简单函数画图例题,Matlab(十) 简单的函数画图
  14. 几种主流数据库类型简介
  15. 难解次级债内乱 美国众议院反咬中国金融开放
  16. 《Loy解说Eureka客户端源码(一)》
  17. MySQL服务器地址为空,win10 mysql没有服务器地址
  18. 小米应用开发者文档(标注需要注意的地方)
  19. C#: //todo
  20. 牧师与魔鬼——动作分离版

热门文章

  1. 社交网络登录失败 当尝试用您的社交网络账号进行第三方登录时,发生了一个错误。
  2. ubuntu19.10安装haroopad软件
  3. 神经网络中的病态曲率-Pathological Curve-举例
  4. 提取字符串中的多个连续数字
  5. 验证Ross《随机过程》(第二版)1.9C
  6. java安装cab破损,WCELOAD无法安装压缩的CAB文件
  7. java值传递试题_面试题:java参数传递 | 学步园
  8. Spring Cloud综合实战 - 基于TCC补偿模式的分布式事务
  9. Centos6.5下升级Python版本
  10. openwrt 在centos7 上的开发环境搭建时需要注意的地方