我正在尝试实现一个linux shell,在这部分我试图重复最近使用过的命令。这是代码中的一个示例
if(strcmp(arg[0],"!") == 0 && arg[1] != NULL){
if(strcmp(arg[1], "-1") == 0){
system("!!");
}
我想在用户输入“! - 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的一种方式:)
希望这有帮助!