Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 简单shell的命令重新执行_C_Shell_Unix - Fatal编程技术网

C 简单shell的命令重新执行

C 简单shell的命令重新执行,c,shell,unix,C,Shell,Unix,我成功地完成了一项任务,任务要求我在一个简单的shell中实现一个历史函数(在C中,通过PuTTY远程使用UNIX box)。它基本上模仿csh历史函数。它将命令行中过去的命令保存在如下格式的文件中,例如: 1-pwd 2-回声你好 3-哇 我现在的问题是如何让它重新执行命令。例如,输入“!3”再次执行whoami。输入“!echo”将重新执行以字符串“echo hello”开头的最后一个命令 教授说这应该通过字符串比较来实现。他说这不应该非常复杂。我已经设法使“!!”打印最后的命令,以及。但是

我成功地完成了一项任务,任务要求我在一个简单的shell中实现一个历史函数(在C中,通过PuTTY远程使用UNIX box)。它基本上模仿csh历史函数。它将命令行中过去的命令保存在如下格式的文件中,例如:

1-pwd
2-回声你好
3-哇

我现在的问题是如何让它重新执行命令。例如,输入“!3”再次执行whoami。输入“!echo”将重新执行以字符串“echo hello”开头的最后一个命令

教授说这应该通过字符串比较来实现。他说这不应该非常复杂。我已经设法使“!!”打印最后的命令,以及。但是另外两次重新执行,我不知道使用什么技术。要打印历史记录,我只是将输入与字符串“history”进行比较,对于“!!”我还将其与输入流进行比较。但是对于这些,我不知道如何检查和比较输入。strcmp是否可以用于此目的,或者我是否看错了方向

冒着听起来愚蠢的风险,我应该注意到我对编程还是很陌生的,特别是在C语言中,而且这门课没有提供太多的指导。

如果它是一个数字(提示:阅读),那么检查数字

如果不是数字,则搜索命令


在内部,您可以将其存储为一个链表,其中每个节点都包含编号和命令。

您应该使用strncmp。您如何比较类似的内容?由于“!”后面的数字或字符串总是不同的,因此无法直接比较。请将其与您必须比较的每一项内容进行比较。查看用户输入是否以“
”开头,如果是,则单独处理该行的其余部分。使用
strtol
调用既可以检测字符串中某个位置是否有数字,也可以分析是否有数字。另一方面,这个问题涉及面很广,不太适合,因此,它需要显示您当前的代码并解释它的问题所在。如何检查输入是否包含!(数字)或!(字符串)?我的比较检查单词“history”和“!!”是否正确,但对于输入的非常量,我真的不知道如何检查“!4”这样的特定格式。我甚至不知道csh是如何做到的。@user3407266阅读我提示中的链接引用。并尝试使用指针算法(例如,如果您有
char str[]=“!4”
,则打印出
str+1
)。