无法通过Ruby执行历史命令

时间:2014-05-25 17:31:44

标签: ruby command-line

我可以使用以下方式获得预期的输出:

puts `ls` # listing of current directory

但是我无法使用类似的调用获取命令历史记录:

puts `history` # Error - No such file or directory - history (Errno::ENOENT)

3 个答案:

答案 0 :(得分:1)

history不是shell中的内置命令。例如,在zsh中,它是别名:

fc -l 1

您可以使用Ruby中的该命令获取历史记录。但我不认为它会如你所能地工作,因为Ruby启动的shell将 没有历史记录!

答案 1 :(得分:1)

ls是"外部"命令通常位于/bin/ls。另一方面,history外部命令,但内置在shell中,通常是bash或zsh。

现在在shellouts中,Ruby默认使用/bin/sh shell,它没有可用的历史命令。

请注意,即使/bin/sh/bin/bash通常是相同的二进制文件,Bash在执行/bin/bash时的行为也会有所不同。这就是你在这里看到的。

答案 2 :(得分:1)

在非交互式会话中禁用了

history命令,但您应该能够直接从文件中访问历史记录:

`cat ${HOME}/.bash_history`

(在Ubuntu上测试)