Powiedzmy, że uruchomiłem polecenie przy użyciu zsh
echo "mysecret" > file
Mogę łatwo wydrukować historię wraz z numerami wpisów za pomocą polecenia fc -l
:
1 echo "mysecret" >| file
Ale jak mogę łatwo usunąć wpis z historii?
Nie mogę znaleźć odpowiedniego akapitu w man zshbuiltins .
Odpowiedzi:
* BSD / Darwin (macOS):
Linux (GNU sed):
Spowoduje to usunięcie wszystkich wierszy pasujących do słowa „porn” z pliku $ HISTFILE.
Używając
setopt HIST_IGNORE_SPACE
, możesz poprzedzić powyższe polecenie znakiem spacji, aby zapobiec zapisaniu go do $ HISTFILE.Jak zauważył Tim w swoim komentarzu poniżej , przedrostek LC_ALL = C zapobiega niepowodzeniu „niedozwolonej sekwencji bajtów”.
źródło
sed -i '' '/S3_SECRET/d' $HISTFILE
. To nie zadziała na Linuksie. stackoverflow.com/questions/5694228/…LC_ALL=C sed -i '' '/S3_SECRET/d' $HISTFILE
stackoverflow.com/questions/11287564/ ...Nie wiem, czy istnieje jakaś elegancka metoda na zrobienie tego, ale w podobnych sytuacjach wylogowałem się (pozwalając zsh opróżnić swój bufor i zapisać moją historię do pliku), zalogowałem się i ostatecznie ręcznie edytowałem
~/.zsh_history
, usuwając " niebezpieczna ”.źródło
HISTFILE=/dev/null
lub po prostu użyj innej powłoki. Jeślizsh
jest to powłoka logowania, zaloguj sięexec sh
, a następnie edytuj~/.zhistory
.~/.zsh_history
, a następnie uruchom ponownie zsh.Jeśli używasz opcji HIST_IGNORE_SPACE w zsh, możesz poprzedzać polecenia spacją „” i nie zostaną one zapamiętane w pliku historii. Jeśli masz tajne polecenia, których często używasz, możesz zrobić coś w następujący sposób: alias hiddencommand = 'hiddencommand' .
źródło
setopt histignorespace
swoje~/.zshrc
histignorespace
. Bardzo przydatne !Ta funkcja usunie dowolną linię z historii Zsh, bez zadawania pytań:
# Accepts one history line number as argument. # Alternatively, you can do `dc -1` to remove the last line. dc () { # Prevent the specified history line from being saved. local HISTORY_IGNORE="${(b)$(fc -ln $1 $1)}" # Write out the history to file, excluding lines that match `$HISTORY_IGNORE`. fc -W # Dispose of the current history and read the new history from file. fc -p $HISTFILE $HISTSIZE $SAVEHIST # TA-DA! print "Deleted '$HISTORY_IGNORE' from history." }
Jeśli chcesz dodatkowo uniemożliwić
dc
zapisywanie wszystkich poleceń w historii, dodaj w swoim~/.zshrc
pliku:zshaddhistory() { [[ $1 != 'dc '* ]] }
Aktualizacja
Opublikowałem teraz bardziej kompleksowe rozwiązanie jako wtyczkę: https://github.com/marlonrichert/zsh-hist
źródło
W bash :
1- w typie terminala bash
hsitory
# Spowoduje to wyświetlenie wszystkich poleceń w pliku historii .bash_history z numerami wierszydawny:
2 - wybierz numer linii CMD, którą chcesz usunąć
history -d 988
Uwaga: jeśli chcesz usunąć na przykład ostatnie 3 CMD, po prostu wybierz numer trzeciego wiersza od dołu, np .: 988 i powtórz CMD
history -d 988
3 razy w kolejności.Źródło
źródło
history -d
nie działa w ZSH bo to tylko alias dlafc -l 1
i kończy sięfc: event not found: -d
błędem.