ruby中exec,system,%x的区别
实践是检验真理的唯一标准,下面用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的区别相关推荐
- SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别
SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 原文:SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语 ...
- 在Ruby中获取system()调用的输出
本文翻译自:Getting output of system() calls in Ruby 如果我在Ruby中使用Kernel#system调用命令,我该如何获得它的输出? system(" ...
- ruby中uniq和uniq!的区别
uniq不会改变数组本身,而uniq!会直接修改数组,且uniq如果找到重复元素,则返回去重的数组,否则返回nil(这里比较容易理解错误而踩坑) a = [5,2,2,5,3]a.uniq # [5, ...
- SQL Server 中 EXEC全称execute 与 SP_EXECUTESQL动态执行sql代码语句 的区别
先睹为快 use cplvfx_DBdeclare @sqlStr nvarchar(max)set @sqlStr='select top 100 * from User'exec (@sqlStr ...
- Ruby中的require_relative和require有什么区别?
本文翻译自:What is the difference between require_relative and require in Ruby? Ruby中的require_relative和re ...
- Python中eval与exec的使用及区别
最近开发中用到了eval()与exec()这两个函数,不知道在哪种场景下用哪个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数的区别 1.eval函数 函数的作用: 计算指定表达式的 ...
- shell和php区别,PHP中exec函数和shell_exec函数的区别
这篇文章主要介绍了PHP中exec函数和shell_exec函数的区别,这两个函数是非常危险的函数,一般情况都是被禁用的,当然特殊情况下也会使用,需要的朋友可以参考下 这两个函数都是执行Linux命令 ...
- Oracle中sys和system用户的区别
Oracle中sys和system用户的区别 1.数据库的启动需要以SYSDBA/SYSOPER身份登录. 2.如果在同一主机上使用IPC连接到数据库使用操作系统授权,登录任何一个用户都可以拥有as ...
- ruby 集合 分组_在Ruby中找到两个集合之间的区别
ruby 集合 分组 Finding differences simply means that finding elements that are uncommon between two sets ...
最新文章
- zabbix系列(四)Zabbix3.0.4添加对Nginx服务的监控
- [Ray Linn]用Visual Studio 2008开发IE BHO(浏览器帮助对象) 之二
- 四元数c语言,C + OpenGL四元数
- 施一公“开学第一课”金句频出!这堂硬核公开课讲了啥?
- dev控件swiftplot图滚动方法_无限轮播图使用Scroller就这么简单
- 【源码】2012年斗地主算法大全
- JavaFX布局中图片在表格中无法被自适应缩小?
- 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
- 基于JAVA+Servlet+JSP+MYSQL的员工报销管理系统
- python读取HDF5数据
- 你真的懂Linux吗?Linux运维从业方向与前景
- matlab与焓湿图,焓湿图的纵坐标与横坐标的夹角为( )。
- matlab简单函数画图例题,Matlab(十) 简单的函数画图
- 几种主流数据库类型简介
- 难解次级债内乱 美国众议院反咬中国金融开放
- 《Loy解说Eureka客户端源码(一)》
- MySQL服务器地址为空,win10 mysql没有服务器地址
- 小米应用开发者文档(标注需要注意的地方)
- C#: //todo
- 牧师与魔鬼——动作分离版
热门文章
- 社交网络登录失败 当尝试用您的社交网络账号进行第三方登录时,发生了一个错误。
- ubuntu19.10安装haroopad软件
- 神经网络中的病态曲率-Pathological Curve-举例
- 提取字符串中的多个连续数字
- 验证Ross《随机过程》(第二版)1.9C
- java安装cab破损,WCELOAD无法安装压缩的CAB文件
- java值传递试题_面试题:java参数传递 | 学步园
- Spring Cloud综合实战 - 基于TCC补偿模式的分布式事务
- Centos6.5下升级Python版本
- openwrt 在centos7 上的开发环境搭建时需要注意的地方