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