加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我不能在Ruby中调用`history`?

发布时间:2020-12-17 01:51:27 所属栏目:百科 来源:网络整理
导读:我可以使用 Ruby程序或irb使用反引号(和%x(),系统等)运行Bash shell命令.但由于某些原因,这与历史无关. 例如: jones$irb --simple-prompt `whoami`= "jonesn" `history`(irb):2: command not found: history= "" 在Ruby程序中,它会产生以下错误: /usr/lo
我可以使用 Ruby程序或irb使用反引号(和%x(),系统等)运行Bash shell命令.但由于某些原因,这与历史无关.

例如:

jones$irb --simple-prompt
>> `whoami`
=> "jonesn"
>> `history`
(irb):2: command not found: history
=> ""

在Ruby程序中,它会产生以下错误:

/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31: command not found: history

在bash本身,这些命令工作正常

并不是Ruby调用正在调用一个新shell – 它根本找不到该命令……

谁知道为什么?我很难过……

解决方法

大多数unix命令都是作为可执行文件实现的,反引号操作符使您能够在脚本中执行这些命令.但是,bash解释的某些命令不是可执行文件;它们是内置于bash命令本身的功能.历史就是这样一个命令.执行此命令的唯一方法是首先执行bash,然后让它运行该命令.

您可以使用命令类型告诉您特定命令的类型,以便知道您是否可以从ruby(或python,perl,Tcl等脚本)执行它.例如:

$type history
history is a shell builtin
$type cat
cat is /bin/cat

您还会发现您不能执行.bashrc文件中定义的别名,因为它们也不是可执行文件.

有助于记住,执行命令并不意味着“运行此shell命令”而是“运行此可执行文件”.如果它不是可执行文件,则无法执行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读