Как программно получить доступ к истории команд bash в C?

Я ненавижу команду bash «история». Он никогда не находит элементы истории, которые я хочу. Иногда я могу получить то, что хочу, с историей | grep XXX', но часто история слишком длинная (400+ просмотров! да )или слишком коротко (нет совпадений. Бу ).

Я подумал про себя, почему бы мне не написать небольшую команду «помощника по истории», которая позволяет мне в основном «помечать» определенные элементы истории и заставлять их всегда появляться в моей истории, как с глобальным списком звезд, так и с cwd конкретный звездный список.

Звучит потрясающе. Так что я наивно пытался читать историю, делая это:

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

О, это не сработало. А, я понял, команда system ()работает в своем собственном контексте и не может получить доступ к истории bash. Дратс. Хорошо, попробую прочитать~/.bash _история

ба бааа ~Нет. Это только история до последнего вызова либо )history -w, либо вызова b )для выхода из оболочки.

Итак, вопрос:Как я могу программно получить доступ к текущей истории bash в C?

(NB. Нет, не то, что находится в ~/.bash _истории, текущая история, точный вывод, который вы видите, когда вводите «история» из подсказки; Кроме того, почему C вы спросите? почему бы и нет... но на самом деле, потому что у меня уже есть удобная оболочка ncurses, которую я собирался использовать, чтобы позволить мне получить причудливое автоматическое завершение -и поиск по истории выбора sub -на обычных терминалах...)

Редактировать :Пожалуйста, если у вас есть что-то полезное, чтобы поделиться, я рад это слышать, но меня немного тошнит от комментариев типа «вам следует прочитать справочные страницы истории bash».

Я прочитал их.Нет ничего , что позволило бы мне "пометить" элемент истории и сделать так, чтобы он всегда появлялся в моей истории, и ничего , что позволило бы мне поддерживать -контекст истории каталога. Это вещи, которые история не поддерживает. Я ценю это. Вот почему я хочу написать вспомогательную функцию для моей конкретной цели. Если у вас есть комментарий вроде "может быть, вам стоит еще немного прочитать справочные страницы по истории", пожалуйста, просто держите его в себе и не отвечайте; это на самом деле не касается моего вопроса.:)

5
задан Doug 16 August 2012 в 01:34
поделиться