Pobierz historię bash, aby pamiętać, że tylko polecenia są uruchamiane z prefiksem spacji!

10

Polecenia wykonywane w terminalu poprzedzonym pustymi spacjami nie są zapisywane w pliku historii poleceń. Ale czy istnieje sposób, aby uzyskać odwrotną sytuację, tj. Historia powinna rejestrować tylko te, które są poprzedzone spacją?

precyzyjny
źródło

Odpowiedzi:

12

Możesz odwrócić domyślne ustawienia Ubuntu, ustawiając dwie zmienne (HISTIGNORE i HISTCONTROL), użyj następujących poleceń:

HISTIGNORE='!( *)'
HISTCONTROL=ignoredups

HISTCONTROL=ignoredupszmienia zachowanie historii, aby zignorować tylko zduplikowane linie i nie ignorować linii zaczynających się od spacji. (Możesz także ustawić HISTCONTROL na pusty ciąg (z HISTCONTROL=), jeśli chcesz zachować duplikaty, ale zwykle nie jest to pożądane.)

HISTIGNORE='!( *)'powoduje, że historia ignoruje każdą linię, która nie zaczyna się od spacji: ( *)pasowałaby do każdej linii zaczynającej się od spacji, ale wiodąca !neguje dopasowanie, więc dopasowuje wszystko, co nie zaczyna się od spacji. A wszystko, co odpowiada wzorowi HISTIGNORE, zostanie zignorowane przez historię. (Ta ostatnia opcja wymaga, bash jest prowadzony z extglobwłączone, z shopt -s extglob, ale to ustawienie domyślne na Ubuntu).

Jeśli chcesz uczynić to trwałym, nie zapomnij umieścić powyższych dwóch poleceń w swoim ~/.bashrc.

sokolnik
źródło
dzięki, właśnie tego chciałem .. zapisałem zmiany w .bashrc... Potrzebowałem tego, aby bash nie zapisywał wszystkich cds, lss i innych codziennych poleceń, których używam; i do tych kilku poleceń, których potrzebuję w historii, mogę teraz użyć prefiksu ..
dokładnie
1
@ zardzewiały Jeśli chcesz wykluczyć tylko niektóre trywialne polecenia, może być dla ciebie lepiej, jeśli użyjesz czegoś takiego HISTIGNORE='ls*:cd*', że historia zignoruje każdą linię zaczynającą się od, lslub cd, możesz rozszerzyć tę listę o inne polecenia, po prostu umieść :między poleceniami . Ale nie zapominaj, że funkcja przywoływania poleceń, do której można uzyskać dostęp za pomocą „klawisza strzałki w górę”, również korzysta z tej historii, więc jeśli ustawisz coś do zignorowania, nie będziesz w stanie przywołać tych ignorowanych poleceń za pomocą „ strzałka w górę".
sokolnik
Chciałem zignorować dowolne polecenie SSH, ale nie polecenia takie jak ssh-copy-idlub ssh-keygen. W HISTIGNORE, mam włączone „ ssh\ *” z innymi moimi ignorowane poleceń. Wydawanie znaków spacji wydaje się być obowiązkowe.
user38537
2

Polecenia wykonywane w terminalu poprzedzonym pustymi spacjami nie są zapisywane w pliku historii poleceń

Tak, oni są.

historia terminalu

MrVaykadji
źródło
1
jest to ustawienie w bash ;-)
Rinzwind
polecenie poprzedzone spacjami. Podobnie jak `sudo apt-get update`
Avinash Raj
Jaka jest wartość twojej zmiennej HISTCONTROL?
glenn jackman
@AvinashRaj: tak, zobacz mi polecenie „tego nie należy nagrywać”, wstawiam spację (widoczne zarówno w wierszu poleceń, jak i w historii). Więc to nie działa w ten sposób. Może możesz to skonfigurować (za pomocą HISTCONTROL); ale domyślnie tak nie jest.
MrVaykadji