• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Ruby中调用带有ProcessSubstitution语法的Shell命令

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

昨天在写ruby的过程中发现一个很奇怪的问题。

我们在ruby中调用shell命令,通常使用反括号(数字键1左边那个)把shell 命令括起来即可,比如:

`ls -l`

这行代码的输出是一个字符串,既是ls -l命令的返回结果。

但是当shell命令中使用了Process Substitution语法后,悲剧就发生啦。

比如下面这个命令:

cat <(echo Hello)

这个命令先运行小括号里面的内容,然后将echo Hello的输出重定向到一个文件中,cat命令显示这个文件的内容。<()这种形式是一个典型的Process Substitution。直接在终端输入上述命令,返回结果是:

Hello

说明上述命令是正确的。

但是在ruby中调用这个命令:

`cat <(echo Hello)`

得到的输出结果是:

sh: 1: Syntax error: "(" unexpected

提示无法解析命令中小括号。

我做了另外一个实验,新建一个Test.sh文件,里面写上同样的命令

cat <(echo Hello)

然后在终端敲上:

sh Test.sh

得到的同样是无法解析命令中的小括号的错误提示。

但是当我使用

bash Test.sh

就能得到Hello的正确输出。

通过Google了解到,标准的Shell不支持Process Substitution语法,而bash是支持的。虽然linux下默认使用的是bash,但是ruby中对命令的调用默认使用的是标准shell。

于是问题转换为如何让ruby使用bash调用shell命令。

通过man bash查看bash的使用方法,发现bash命令有一个-c参数,可以让bash运行指定的字符串而不是shell文件。

于是在ruby中使用如下方式:

`bash -c 'cat <(echo Hello)'`

注意-c后面的参数需要使用单引号包起来。

这样,ruby中也能使用bash调用shell命令啦,再也不用担心使用到bash支持的扩展语法啦。  

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
在windows系统下Ruby or Rails环境正确安装并调用ckeditor的步骤发布时间:2022-07-14
下一篇:
QQ账号登陆的Ruby实现发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap