2014-09-22 65 views
2

我遇到了一个障碍,我试图实现一个与C++类似的linux shell程序,并且我的许多命令似乎都能正常工作,但是,当我尝试获取历史记录(列出所有最近执行的命令)我收到“sh:1:history:not found”的错误,下面这行是在该区域运行的所有内容,有什么问题?系统(“历史”)不起作用

system("history"); //produces the error above^

如果我做

$ history 

在命令行还行吧......为什么不用罚款C++?

+3

由于'history'不是'PATH'中的可执行文件,而是'bash'提供的shell命令。 – leemes 2014-09-22 16:33:09

+0

所以如果你编写一个shell,你需要自己实现'history',作为内建函数(很像'cd'也应该是一个内建函数) – 2014-09-22 17:05:35

回答

4

system使用/bin/sh执行程序,但history是bash内建的。

您可以改为查看~/.bash_history的内容。 (注意(by lemes).bash_history只在关闭前一个bash会话后更新,以及它不会通过执行system的命令更新。)

+1

但是请注意,'.bash_history'只在关闭前一个bash会话后才会更新,并且它不会通过用'system'执行命令来更新。如果OP试图获得用'system'执行的命令的历史记录,它将无济于事。 – leemes 2014-09-22 16:36:27

+0

我得看看〜/ .bash_history,感谢指针@Csq! – snurby77 2014-09-22 17:48:04

2

因为它不是必须通过/ bin/sh访问的bash shell内建-c`(可能是Bourne shell)。