我可以使用以下方式获得预期的输出:
puts `ls` # listing of current directory
但是我无法使用类似的调用获取命令历史记录:
puts `history` # Error - No such file or directory - history (Errno::ENOENT)
答案 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上测试)