【发布时间】:2018-11-07 13:28:26
【问题描述】:
我正在尝试将历史追加添加到 MacPorts shell。 MacPorts 当前使用类似 bash 的历史记录,其中历史记录是在会话结束后写入的。如果会话崩溃,这可能会出现问题,所以我试图让 MacPorts shell 遵循 zsh 的示例。即,在执行时将每个历史记录项附加到文件中。
在GNU readline, 中,这个功能对于append_history. 是微不足道的,但是,MacPorts 依赖于Apple 的editline。编辑线库似乎没有 append_history 的等价物,所以我有点不知道该怎么做才能将历史记录附加到文件中。我曾想过使用像fopen 和fprintf 这样的旧标准函数,但我意识到editline 使用它自己的历史字符串编码(例如,空格字符被转换为八进制\040)。 MacPorts 需要与该编码兼容,因为在多个地方使用了 editline。我假设使用了这种编码,因为空格被用作历史分隔符。
我可以尝试编写自己的函数来兼容这种编码,但这似乎充满了不必要的困难。我觉得我一定是错过了什么。有没有一种简单的方法可以使用编辑线将历史记录附加到文件中?
【问题讨论】:
-
看看
history()函数,它有一个参数ev这个参数决定了函数将执行的操作,ev的一些值你可能会觉得有用的是H_APPEND附加char *到历史列表,H_SAVE将历史列表保存到指定文件。供参考,这是历史声明int history(History *h, HistEvent *ev, int op, ...);所有这些都是根据man 3 editline -
@xmonk 感谢您的反馈。我已经看过
H_APPEND等等,但它似乎用于附加到内存中的历史列表。不适用于附加到磁盘上的历史列表。此外,H_SAVE似乎不支持追加。我认为它会覆盖整个历史文件,所以它似乎不适合我想要的。
标签: c readline macports libreadline editline