Чтобы не регистрировать «опасные» команды в истории 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 ).