【问题标题】:History command for shell command in C. Where to startC 中 shell 命令的历史命令。从哪里开始
【发布时间】:2013-10-28 06:23:02
【问题描述】:

我无法启动这段代码,我真的不知道从哪里开始。我试图了解该怎么做。我要做的几乎就是一旦我执行了文件,我应该能够输入“历史”,它应该会显示我所有使用过的命令的历史。我将如何编码此文件以允许我这样做?任何提示或线索将不胜感激!

【问题讨论】:

  • Any hints or clues... -- 看bash source code
  • 也许使用readline库。
  • 我查看了 readline 库,这些看起来都很复杂。有没有更简单的方法来编辑我的 makefile 并创建一个能够使用命令的历史记录!(数字),!(字符串)用于最后使用的字符串,以及最后使用的命令?
  • 使用readline 库相当简单;它为您处理大部分工作。自己动手将涉及处理 readline 处理的 70%。如果您不必重新发明轮子,那就不要。

标签: c linux shell unix


【解决方案1】:

基础知识相对简单。您需要为历史设计一个合适的磁盘格式,记住您可能不希望文件无限增长(尽管对于第一个版本可能没问题)。而且您需要一组函数来操作文件(打开、关闭、写入、搜索)。

每次您读取一个命令(完整的命令 - 一个管道,或一个 for 循环,或其他)时,您也会写入您的历史机制。

您的历史记录机制还应该允许您检索以前的命令、列出它们或按内容或编号搜索它们。

您应该考虑的好处包括确保在执行其他命令时关闭历史记录文件,并确保子 shell 不写入历史记录(通常)。您需要考虑是否可以让多个 shell 访问同一个历史文件;您的历史会在会话中持续存在吗?如果同时打开两个终端窗口会怎样?

GNU readline 库具有挂钩,可以与历史库集成。它还提供了一个历史库。

【讨论】:

  • 谢谢,之前有人说过,但是好像被删除了,我可以使用.bash_history文件?这是要考虑的事情,还是创建一个新文件来保存所有历史记录的更好选择?
  • 将历史记录存储在文件中是一种很好的做法(在我看来),因此您的后者执行也可以看到历史记录。
  • 您使用的文件名由您决定;理解文件的格式会更难(可能)——嗯,或者可能不是……它似乎是每个历史命令的一行文本。这可以解释为什么 bash 如此严格地扁平化历史,在这个过程中破坏了我精心格式化的 shell 代码。这也意味着它在运行时将大部分历史信息保存在内存中,仅在退出时将历史信息转储到磁盘。哦,好吧... Korn shell 历史使用以 null 结尾的字符串并在单个命令中保留换行符。
猜你喜欢
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2013-05-12
  • 2019-05-07
相关资源
最近更新 更多