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.


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.


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.


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 :-)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.