gpt4 book ai didi

c - 如何以编程方式访问 C 中的 bash 命令历史记录?

转载 作者:太空狗 更新时间:2023-10-29 15:04:32 26 4
gpt4 key购买 nike

我讨厌 bash 'history' 命令。它永远找不到我想要的历史项目。有时我可以用'history |得到我想要的东西grep XXX' 但通常历史记录太长(400 多次点击!耶)或太短(没有点击。Boo)。

我心想,为什么我不写一个小的“历史助手”命令,让我基本上为特定的历史项目“加注星标”,并使它们总是出现在我的历史中,同时具有全局星表和一个 cwd 特定的星表。

听起来很棒。所以我天真地试图通过这样做来阅读历史:

system("history > blah")
FILE *fp = fopen("blah", "r")

哦,那没用。啊,我明白了,system() 命令在它自己的上下文中运行,无法访问 bash 历史记录。糟透了。好的,我会尝试阅读 ~/.bash_history

ba baaa~ 不。这只是在最后一次调用 a) history -w 或 b) 调用退出 shell 之前获取历史记录。

那么,问题:我如何以编程方式访问 C 中的当前 bash 历史记录?

(注意。不,不是 ~/.bash_history 中的内容,当前 历史,当您从提示中键入“history”时看到的确切输出;还有,为什么你问 C?为什么不……但真的,因为我已经有了一个方便的 ncurses 包装器,我打算用它来让我在普通终端上获得花哨的自动完成和子选择历史搜索……)

编辑:拜托,如果你有什么有用的贡献,我很高兴听到,但我有点厌倦像“你应该阅读 bash 历史手册页”这样的评论。

我都看过了。 没有什么可以让我为历史项目“加星标”并让它始终出现在我的历史中,没有可以让我维护每个目录的历史上下文.这些都是历史不支持的事情。我很欣赏这个。这就是为什么我想为我的特定目的编写一个辅助函数。如果您有类似“也许您应该多读一些历史手册页”这样的评论,请暂时搁置,不要回应;它并没有真正解决我的问题。 :)

最佳答案

简答

你可以在 history 源代码中找到答案,它是 bash 内置的。

长答案

看来您只需要阅读一下help historyman bash

您的历史文件不断地用 shell 重写(取决于您的设置。默认情况下,它在注销/退出时完成)。你需要破解 shell 来添加特定的规则来做到这一点。但是你离这个水平还很远。

只是因为如果你非常接近它,你就不会问如何使用 c 中的 .bash_history =)

然而,还有另一种方法可以改善您的历史记录:增加您的历史记录大小,限制重复读取并使您的所有命令在执行后立即进入历史记录。为此,您需要将以下变量放入 .bashrc 中:

PROMPT_COMMAND='history -a;history -n'

export HISTCONTROL=ignoredups
export HISTTIMEFORMAT='%F %T '
export HISTSIZE=100500

shopt -s histappend
shopt -s cmdhist

你也可以阻止特定的命令记录

export HISTIGNORE="unwanted_command:unwanted_mask*"

希望对你有所帮助。

关于c - 如何以编程方式访问 C 中的 bash 命令历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11966030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com