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.