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