Para evitar el registro de comandos "peligrosos" en el historial de bash, he agregado la siguiente línea a mi .bashrc
archivo:
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
esto funciona bien, pero tiene un efecto secundario: no puedo ver el historial completo de los comandos ejecutados en una máquina. Digamos que tengo varias máquinas para experimentos, y quiero poder ver todos los comandos ejecutados. Usaría bash internal history
para mostrar los comandos ejecutados, y quizás grep para la fecha de hoy:
history | grep Sep-28
Lo que me gustaría tener también es registrar comandos "peligrosos", pero poner un #
al principio de la línea, de modo que si ejecuto el comando desde el historial por error, no se producirá ningún daño.
No tengo idea si esto es posible.
Actualización y aclaración:
La razón principal por la que esto es un problema para mí es que generalmente estoy conectado a mi máquina desde varios terminales, y cualquier comando ejecutado en un terminal se lee inmediatamente en el historial de otros terminales. Esto se logra mediante
PROMPT_COMMAND="history -a; history -c; history -r"
Imaginemos que tengo dos terminales abiertas. En uno tengo algún cat /dev/foo > file.out
proceso en ejecución. En el segundo, verifico el progreso con ls -lAhF
. Sigo repitiendo ls
presionando Upy ENTER(es decir, el último comando del historial). Tan pronto como termina el primer comando, el último comando del historial ya no es ls
, pero cat /dev/foo > file.out
. Si no tengo cuidado, volveré a iniciar cat y sobrescribiré file.out.
Lo que me gustaría lograr es que el comando cat esté precedido por un #
, para que no se ejecute. Sin embargo, todavía lo vería en la historia y puedo reutilizarlo (si es un comando largo) al descomentarlo.
watch ls -lAhF
owhile sleep 1; do ls -lAhf; done
; en lugar de ver el tamaño del archivo, puede usarpv /dev/foo > file.out
( ivarch.com/programs/pv.shtml ).