Para evitar o registro de comandos "perigosos" no histórico do bash, adicionei a seguinte linha ao meu .bashrc
arquivo:
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
isso funciona bem, mas tem um efeito colateral: não consigo ver o histórico completo dos comandos executados em uma máquina. Digamos que tenho várias máquinas para experimentos e quero poder ver todos os comandos executados. Eu usaria o bash internal history
para exibir comandos executados e talvez grep para a data de hoje:
history | grep Sep-28
O que eu gostaria de ter é registrar também comandos "perigosos", mas coloque um #
no início da linha, para que, se eu executar o comando do histórico por engano, nenhum dano será causado.
Não tenho ideia se isso é possível.
Atualização e esclarecimento:
A principal razão pela qual isso é um problema para mim é que geralmente estou conectado à minha máquina a partir de vários terminais, e qualquer comando executado em um terminal é imediatamente lido no histórico de outros terminais. Isso é alcançado por
PROMPT_COMMAND="history -a; history -c; history -r"
Vamos imaginar que tenho dois terminais abertos. Em um, tenho algum cat /dev/foo > file.out
processo em execução. No segundo, verifico o progresso com ls -lAhF
. Continuo repetindo ls
pressionando Upe ENTER(ou seja, o último comando da história). Assim que o primeiro comando termina, o último comando do histórico não é mais ls
, mascat /dev/foo > file.out
. Se não tomar cuidado, vou iniciar o gato novamente e sobrescrever file.out.
O que eu gostaria de conseguir é que o comando cat seja precedido por a #
, para que não seja executado. No entanto, eu ainda o veria na história e posso reutilizá-lo (se for um comando longo) sem comentar.
watch ls -lAhF
orwhile sleep 1; do ls -lAhf; done
; em vez de observar o tamanho do arquivo, você pode usarpv /dev/foo > file.out
( ivarch.com/programs/pv.shtml ).