Используете launchd для очистки истории bash?
Уточнение: не
historyсобираюсь уничтожать , ищу средства для периодической очисткиlaunchdв целях безопасности
Используется cat /dev/null > ~/.bash_historyдля очистки истории bash, как это было замечено во многих обсуждениях * nix, как наиболее эффективный способ сделать это.
Поэтому я поместил его в сценарий оболочки, который запускается launchd, но через некоторое время я понял, что хотя он запускается, он не очищает историю.
Можно ли очистить историю bash таким образом с помощью сценария bash или это можно сделать только вручную от имени пользователя? Возможно, мне нужно запустить команду непосредственно в .plist, а не через сценарий bash?
Примечание: у меня есть другие скрипты, которые работают правильно через launchd, поэтому вопрос строго касается возможности очистки истории через агент.
Спасибо
Обновление: нашел этот классный сайт, который помогает генерировать
launchdскрипты, если это кому-то помогает. За это ручаться не могу, но это намного проще, чем взломать XML. Кажется, он используетсяsh -cдля всех команд, поэтому не уверен, почему это так.генератор списков запуска http://launched.zerowidth.com/
Ответы
Ваша bashистория состоит из двух «историй», а не из одной. Одна из этих историй хранится в файле - ее размер / глубина определяется параметром HISTFILESIZE. Другая история кэшируется в памяти - ее размер регулируется параметром HISTSIZE.
Вы можете проверить размер / глубину ваших историй:
$ echo $HISTFILESIZE
$ echo $HISTSIZE
Причина двух историй в том, что одна связана с каждым сеансом оболочки ( HISTSIZE), а другая история - это файл, ~/.bash_historyкоторый является «постоянным» и в конечном итоге получает истории сеансов, когда они превышают свою максимальную глубину или когда сеанс завершается. Это немного сложно объяснить, и рисунок ниже может помочь прояснить связь между этими двумя историями.
Но вернемся к вашей цели:
Вместо того, чтобы предпринимать шаги для удаления вашей истории, вы можете просто установить HISTSIZEи HISTFILESIZEна ноль ~/.bashrc:
HISTSIZE=0
HISTFILESIZE=0
Если это не то, что вы хотите, вы, конечно, можете периодически удалять файл истории, но знайте, что это не удаляет историю сеанса . Удалять файл истории путем создания .plistфайла необязательно. Команда history- это инструмент, который нужно использовать для этого задания ( history --helpподробности см. ). Следующая команда удалит историю одного сеанса :
$ history -cw
Удаление содержимого из файла истории ( ~/.bash_history) выполняется обычным образом:
$ > ~/.bash_history
Вы можете поместить один или оба из этих команд в crontab, но вы должны обеспечить оболочки по умолчанию , bashкак historyэто встроенный .
Для получения дополнительной информации по теме истории оболочки вы можете прочитать эти вопросы и ответы . Это касается zsh- нет bash, но принципы те же.
Похоже, вы придумали очень запутанное решение проблемы отказа от bash_history.
Я бы посоветовал вместо периодической очистки истории из launchd просто отключить запись истории:
echo 'set +o history' >> ~/.bashrc
Закройте вкладку терминала и откройте новую - и ваша история больше не будет записываться.