Per impedire la registrazione di comandi "pericolosi" nella cronologia di bash, ho aggiunto la seguente riga al mio .bashrc
file:
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
funziona bene, ma ha un effetto collaterale: non riesco a vedere la cronologia completa dei comandi eseguiti su una macchina. Diciamo che ho diverse macchine per esperimenti e voglio essere in grado di vedere tutti i comandi eseguiti. Vorrei usare il bash interno history
per visualizzare i comandi eseguiti, e forse grep per la data di oggi:
history | grep Sep-28
Quello che vorrei avere è di registrare anche comandi "pericolosi", ma mettere un #
all'inizio della riga, in modo che se per caso eseguo il comando dalla storia per errore, non verrebbe fatto alcun danno.
Non ho idea se questo sia possibile.
Aggiornamento e chiarimenti:
Il motivo principale per cui questo è un problema per me è che di solito sono collegato alla mia macchina da più terminali e qualsiasi comando eseguito su un terminale viene immediatamente letto nella storia di altri terminali. Questo è raggiunto da
PROMPT_COMMAND="history -a; history -c; history -r"
Immaginiamo di avere due terminali aperti. In uno ho qualche cat /dev/foo > file.out
processo in esecuzione. Nel secondo, controllo i progressi con ls -lAhF
. Continuo a ripetere ls
premendo Upe ENTER(ovvero l'ultimo comando dalla cronologia). Non appena termina il primo comando, l'ultimo comando della cronologia non è più ls
, ma cat /dev/foo > file.out
. Se non sto attento, ricomincio cat e sovrascrivo file.out.
Quello che vorrei ottenere è che il comando cat sarebbe preceduto da a #
, in modo che non venisse eseguito. Tuttavia, lo vedrei ancora nella storia e posso riutilizzarlo (se è un comando lungo) annullandolo dal commento.
watch ls -lAhF
owhile sleep 1; do ls -lAhf; done
; invece di guardare le dimensioni del file, puoi usarepv /dev/foo > file.out
( ivarch.com/programs/pv.shtml ).