Aby zapobiec rejestrowaniu „niebezpiecznych” poleceń w historii bash, dodałem do mojego .bashrc
pliku następujący wiersz :
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
działa to dobrze, ale ma efekt uboczny: nie widzę pełnej historii poleceń wykonywanych na komputerze. Powiedzmy, że mam kilka maszyn do eksperymentów i chcę widzieć wszystkie wykonywane polecenia. Użyłbym bash wewnętrznego history
do wyświetlenia wykonanych poleceń i być może grep dla dzisiejszej daty:
history | grep Sep-28
Chciałbym również rejestrować „niebezpieczne” polecenia, ale umieszczać je #
na początku wiersza, aby w razie przypadkowego wykonania polecenia z historii przez pomyłkę nie doszło do żadnych szkód.
Nie mam pojęcia, czy to możliwe.
Aktualizacja i wyjaśnienie:
Głównym powodem, dla którego jest to dla mnie problem, jest to, że zwykle jestem podłączony do mojej maszyny z kilku terminali, a każde polecenie wykonane na jednym terminalu jest natychmiast odczytywane w historii innych terminali. Osiąga się to przez
PROMPT_COMMAND="history -a; history -c; history -r"
Wyobraźmy sobie, że mam otwarte dwa terminale. W jednym mam jakiś cat /dev/foo > file.out
proces. W drugim sprawdzam postęp za pomocą ls -lAhF
. Powtarzam ls
, naciskając Upi ENTER(czyli ostatnie polecenie z historii). Zaraz po zakończeniu pierwszego polecenia ostatnie polecenie z historii nie jest już ls
, ale cat /dev/foo > file.out
. Jeśli nie będę ostrożny, uruchomię ponownie kota i zastąpię plik.out.
Chciałbym, aby polecenie kota było poprzedzone znakiem „a” #
, aby nie zostało wykonane. Wciąż jednak widziałbym go w historii i mogę go ponownie użyć (jeśli jest to długie polecenie), nie komentując go.
watch ls -lAhF
lubwhile sleep 1; do ls -lAhf; done
; zamiast oglądać rozmiar pliku, możesz użyćpv /dev/foo > file.out
( ivarch.com/programs/pv.shtml ).