Wykluczając zapisywanie niektórych poleceń w historii bash

31

Czy istnieje jakiś sposób, aby wykluczyć takie polecenia jak rm -rf, svn revertod bycia coraz przechowywane w bash historii? Właściwie to przez pomyłkę wydałem je wiele razy, chociaż nie mam zamiaru tego robić, tylko dlatego, że robię rzeczy szybko i to się stało. W rezultacie straciłem dużo pracy, którą wykonałem do tej pory.

Ravi Gupta
źródło
3
Możesz być zainteresowany serverfault.com/questions/48769/…
Luc M

Odpowiedzi:

53

Możesz chcieć $HISTIGNORE: „Rozdzielona dwukropkami lista wzorców używanych do decydowania, które wiersze poleceń powinny zostać zapisane na liście historii”. Ta linia w twoim ~ / .bashrc powinna wykonać zadanie:

HISTIGNORE='rm *:svn revert*'

Możesz także dodać spację na początku polecenia, aby wykluczyć go z historii. Działa tak długo, jak $HISTCONTROLzawiera ignorespacelub ignoreboth, co jest domyślne w każdej dystrybucji, której użyłem.

10b0
źródło
4
przestrzeń zawsze tak robiłem.
Rob
Kiedyś przypadkowo wprowadzałem dodatkowe y, po tym wszystkim cp(alias do cp -i) przeszło. Więc aliasowałem yjako alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Ale HISTIGNOREto lepsza metoda, jak się wydaje. :) Dzięki.
anishsane
2
Aby być bardziej precyzyjnym: możesz dodać export HISTCONTROL="ignorespace"do swojego, ~/.bashrcaby zignorować polecenia zaczynające się od spacji.
Aidan Feldman,
@AidanFeldman nie jest domyślnie na macOS
akauppi
UWAGA: należy wpisać spację, gdy piszemy w wierszu polecenia, a nie w HISTIGNORE.
Gayan Weerakutti
6

Choć nieco inaczej niż w pytaniu OP, kiedy celowo nie chcę, aby polecenie zostało zapisane w historii basha, poprzedzam je spacją. Działa w Ubuntu i jego wariantach, nie jestem pewien, czy działa na wszystkich systemach.

k4rtik
źródło
6
Zależy $HISTCONTROL(patrz moja odpowiedź).
l0b0
@ L0b0 racja, dziękuję za zwrócenie uwagi.
k4rtik
1

Zazwyczaj zabijam instancję bash, gdy robię rzeczy, których nie chcę w historii.

kill -9 $$

$$ reprezentuje bieżący proces - bash po uruchomieniu go z powłoki. Możesz użyć $ BASHPID, ale to więcej pisania :-)

Komandor Keen
źródło
2
Niektóre ustawienia Bash (takie jak to ) będą zapisywać historię po każdym poleceniu, w takim przypadku to nie zadziała.
l0b0
1
Zwykłem to robić. ale ustawienie HISTFILE=/dev/nulljest lepszą opcją.
anishsane
po prostu HISTFILE=działa zarówno w bash, jak i ksh.
kubańczyk 8.04.16
lubunset HISTFILE
Todd Walton