Чтобы не регистрировать «опасные» команды в истории bash, я добавил в свой .bashrc
файл следующую строку :
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
это хорошо работает, но имеет побочный эффект: я не вижу полной истории команд, выполняемых на машине. Допустим, у меня есть несколько машин для экспериментов, и я хочу видеть все выполненные команды. Я бы использовал внутренний bash history
для отображения выполненных команд и, возможно, grep для сегодняшней даты:
history | grep Sep-28
То, что я хотел бы сделать, - это также регистрировать «опасные» команды, но ставить #
в начале строки, чтобы, если мне случится выполнить команду из истории по ошибке, никакого ущерба не будет.
Я понятия не имею, возможно ли это.
Обновление и уточнение:
Основная причина, по которой это является проблемой для меня, заключается в том, что я обычно подключаюсь к своей машине с нескольких терминалов, и любая команда, выполняемая на одном терминале, немедленно считывается в историю других терминалов. Это достигается
PROMPT_COMMAND="history -a; history -c; history -r"
Давайте представим, что у меня два открытых терминала. В одном у меня cat /dev/foo > file.out
запущен какой-то процесс. Во втором я проверяю прогресс с ls -lAhF
. Я продолжаю повторять ls
, нажимая Upи ENTER(то есть последнюю команду из истории). Как только первая команда заканчивается, последней команды из истории больше нет ls
, но cat /dev/foo > file.out
. Если я не буду осторожен, я начну cat снова и перезапишу file.out.
Я хотел бы добиться, чтобы команде cat предшествовала буква a #
, чтобы она не выполнялась. Я, однако, все еще вижу это в истории и могу использовать его повторно (если это длинная команда), не комментируя его.
watch ls -lAhF
илиwhile sleep 1; do ls -lAhf; done
; вместо просмотра размера файла вы можете использоватьpv /dev/foo > file.out
( ivarch.com/programs/pv.shtml ).