C Linux shell - 重复最近的命令

时间:2013-12-07 21:56:08

标签: c linux shell command history

我正在尝试实现一个linux shell,在这部分我试图重复最近使用过的命令。这是代码中的一个示例

if(strcmp(arg[0],"!") == 0 && arg[1] != NULL){
            if(strcmp(arg[1], "-1") == 0){
                 system("!!");


            }

我想在用户输入“! - 1”时执行最后一个命令我尝试了系统命令“!!”但我得到一个错误“命令未找到”。你能帮忙吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

那是因为!!实际上不是命令。它是bash中重写最近最近使用的命令的快捷方式。发生了什么事情system正在!!环境变量中寻找PATH二进制文件,当然,却找不到它。

你可以做的就是大多数shell所做的事情,保存最后使用过的命令的文件并执行最后发出的命令。

例如,查看文件~/.bash_history。这是控制台为您的用户跟踪的命令历史记录。为了达到你想要的效果,你要么将命令存储在内存中的缓冲区中(这不是一个好主意,因为如果重置或关闭shell,你将丢失历史记录)或将它们放在.bash_history中 - 就像文件。

另外,请查看history命令,主要是手册页(man history)。您会找到一个有用的部分PROGRAMMING WITH HISTORY FUNCTIONS。通过包含<readline/history.h>,您将可以访问对历史记录进行操作的某些功能。我不知道你是否可以使用它,因为这可能只能在bash内访问,因为你正在创建自己的shell,也许它不会起作用。我仍然认为自己跟踪历史是KISS的一种方式:)

希望这有帮助!