To pytanie powinno być prawdopodobnie przeniesione do ServerFault, ponieważ nie jest to „programowanie”, ale „administrator serwera” - ale dzięki za pytanie / odpowiedź, dokładnie to, czego potrzebowałem!
Andrew Theken,
Odpowiedzi:
294
Rozpocznij polecenie spacją i nie będzie ono uwzględnione w historii.
Należy pamiętać, że wymaga to ustawienia zmiennej środowiskowej $HISTCONTROL.
Sprawdź, czy następujące polecenie zwraca ignorespacelub
ignoreboth
#> echo $HISTCONTROL
Aby dodać zmienną środowiskową, jeśli jej brakuje, do profilu bash można dodać następujący wiersz. Na przykład%HOME/.bashrc
export HISTCONTROL=ignorespace
Po uzyskaniu profilu ponownie polecenia z prefiksem spacji nie zostaną zapisane $HISTFILE
Rozszerzenie odpowiedzi @John Doe & @ user3270492. Ale wydaje mi się, że to działa.
<your_secret_command>; history -d $((HISTCMD-1))
Nie powinieneś widzieć wpisu polecenia w swojej historii.
Oto wyjaśnienie ..
„Historia -d” usuwa wspomniany wpis z historii.
HISTCMD przechowuje numer polecenia, który ma zostać wykonany w następnej kolejności. Tak więc (HISTCMD-1) odnosi się do ostatnio wykonanego polecenia.
następnie kontynuujcie swoje podstępne działania. Ustawienie pliku histogramu na/dev/null zostanie zarejestrowane w pliku historii, ale ten wpis zostanie łatwo usunięty i nie zostaną wyświetlone żadne ślady (przynajmniej w pliku historii).
To była już odpowiedź wiele razy. Co powiedziałbyś, że twoja odpowiedź dodaje do tego wątku (oprócz niepotrzebnego hałasu)?
gniourf_gniourf
Nie ujęto go w jedną odpowiedź , aby nie wyświetlać samego polecenia w historii i nie wyświetlać niczego, co wprowadzono później.
Christian
1
Ale teraz ten wątek to prawdziwy bałagan! w tym przypadku, szczególnie w przypadku tak starego pytania, uważam, że lepiej jest edytować istniejące już dobre odpowiedzi i / lub zostawić komentarz…
gniourf_gniourf
5
Jak wspominał Doodad w komentarzach , unset HISTFILErobi to ładnie, ale jeśli chcesz również usunąć trochę historii, zrób to, echo $HISTFILEaby uzyskać lokalizację pliku historii (zwykle ~/.bash_history) unset HISTFILEi edytować ~/.bash_history(lub cokolwiek innego HISTFILE- oczywiście teraz unset, abyś mógł ” czytać to).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Następnie zredagowałeś swoją historię i fakt, że ją edytowałeś!
Próbowałem tego na: GNU bash, wersja 3.2.57 (1) -release (x86_64-apple-darwin15) i to nie działa. I używane po wyłączonym HISTORII polecenia były przechowywane w ~ / .bash_history
Krystian
@Krystian Mój błąd - napisałem „rozbrojoną HISTORIĘ”, kiedy powinno to być „rozbrojoną HISTORIĘ” - poprawione. Czy to działa teraz? Działa na GNU bash, wersja 4.3.30 (1) -release (x86_64-pc-linux-gnu).
drkvogel
nie jestem pewien. Prosty test: unset HISTFILE; echo TEST; historyda ci polecenie echo TESTjak poprzednie do ostatniego. Chociaż po zakończeniu sesji i ponownym nawiązaniu połączenia historia rzeczywiście nie ma tego wpisu. Powiedziałbym więc, że to działa :)
Krystian
unset HISTFILEnie wydaje się, aby polecenia były zapisywane w historii w pamięci, ale nie zatrzymuje ich w jakimkolwiek pliku $ HISTFILE. Sądzę więc, że wciąż masz w pamięci historię lokalną, ale nie jest ona już zapisywana w pliku, czego możesz chcieć! ;)
drkvogel
4
Możesz także użyć następującego polecenia:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Stworzyłem z tego alias: alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"i teraz możesz zrobić coś takiego:mysql -uroot -pSecretPassword ; forget
sobi3ch
1
Przepraszam, ale zdaję sobie sprawę, że musisz utworzyć funkcję zamiast aliasu, ponieważ znaki cudzysłowu zmieniają znaczenie $si inne rzeczy w sed. function forget() { // put code here // }
sobi3ch
3
Jeśli używasz zsh , możesz uruchomić:
setopt histignorespace
Po tym ustawieniu każde polecenie zaczyna się od spacji zostanie wykluczone z historii.
Możesz użyć aliasów w .zshrccelu włączenia / wyłączenia :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Fajnie, ale to pytanie jest specjalnie oznaczone jako bash
tripleee
2
Można to osiągnąć na kilka sposobów. To ustawia rozmiar pliku historii na 0:
export HISTFILESIZE=0
Spowoduje to ustawienie pliku historii na /dev/nullskuteczne wyłączenie:
export HISTFILE=/dev/null
W przypadku pojedynczych poleceń można poprzedzić je spacją i nie zostanie ono zapisane w pliku historii. Zauważ, że wymaga to włączenia ignorespacewartości do $HISTCONTROLzmiennej środowiskowej (man bash i poszukaj ignorespacewięcej szczegółów).
To wyłącza historię dla wszystkich przyszłych poleceń, a nie dla pojedynczych poleceń. Większość ludzi, którzy tu przychodzą, powinna zamiast tego spojrzeć na zaakceptowaną odpowiedź.
tripleee
Jest to poprawne lub w porządku, ale niekompletne. Tak długo, jak dodamy set -x historypóźniej polecenie odwrotne , działa.
Abdillah
0
To polecenie może się przydać. Nie zarejestruje to wykonanego polecenia
Odpowiedzi:
Rozpocznij polecenie spacją i nie będzie ono uwzględnione w historii.
Należy pamiętać, że wymaga to ustawienia zmiennej środowiskowej
$HISTCONTROL
.Sprawdź, czy następujące polecenie zwraca
ignorespace
lubignoreboth
Aby dodać zmienną środowiskową, jeśli jej brakuje, do profilu bash można dodać następujący wiersz. Na przykład
%HOME/.bashrc
Po uzyskaniu profilu ponownie polecenia z prefiksem spacji nie zostaną zapisane
$HISTFILE
źródło
W każdej sesji Bash ustaw plik historii na / dev / null, wpisując:
Zauważ, że, jak wskazano w komentarzach, nie spowoduje to zapisania żadnych poleceń w tej sesji do historii!
Po prostu nie zadzieraj z ciężką pracą administratora systemu;)
Rozwiązanie Doodad jest bardziej eleganckie. Po prostu wyłącz zmienną:
unset HISTFILE
(dzięki!)źródło
/dev/null
uprawnień na 0600 podczas wylogowywania. Zamiast tego użyłemunset HISTFILE
.źródło
Rozszerzenie odpowiedzi @John Doe & @ user3270492. Ale wydaje mi się, że to działa.
Nie powinieneś widzieć wpisu polecenia w swojej historii.
Oto wyjaśnienie ..
„Historia -d” usuwa wspomniany wpis z historii.
HISTCMD przechowuje numer polecenia, który ma zostać wykonany w następnej kolejności. Tak więc (HISTCMD-1) odnosi się do ostatnio wykonanego polecenia.
Usuń określoną linię z pliku historii Bash
źródło
Możesz rozważyć użycie powłoki bez historii, na przykład
(być może
/bin/dash
lub/bin/sash
może być bardziej odpowiednie niż/bin/sh
)lub jeszcze lepiej skorzystać z narzędzia partii , np
Historia będzie zawierało
sh
lubbatch
który nie jest bardzo sensowneźródło
Możesz rozpocząć sesję od
następnie kontynuujcie swoje podstępne działania. Ustawienie pliku histogramu na
/dev/null
zostanie zarejestrowane w pliku historii, ale ten wpis zostanie łatwo usunięty i nie zostaną wyświetlone żadne ślady (przynajmniej w pliku historii).Jest to również niestałe.
źródło
Jak wspominał Doodad w komentarzach ,
unset HISTFILE
robi to ładnie, ale jeśli chcesz również usunąć trochę historii, zrób to,echo $HISTFILE
aby uzyskać lokalizację pliku historii (zwykle~/.bash_history
)unset HISTFILE
i edytować~/.bash_history
(lub cokolwiek innegoHISTFILE
- oczywiście terazunset
, abyś mógł ” czytać to).Następnie zredagowałeś swoją historię i fakt, że ją edytowałeś!
źródło
unset HISTFILE; echo TEST; history
da ci polecenieecho TEST
jak poprzednie do ostatniego. Chociaż po zakończeniu sesji i ponownym nawiązaniu połączenia historia rzeczywiście nie ma tego wpisu. Powiedziałbym więc, że to działa :)unset HISTFILE
nie wydaje się, aby polecenia były zapisywane w historii w pamięci, ale nie zatrzymuje ich w jakimkolwiek pliku $ HISTFILE. Sądzę więc, że wciąż masz w pamięci historię lokalną, ale nie jest ona już zapisywana w pliku, czego możesz chcieć! ;)Możesz także użyć następującego polecenia:
Myślę, że to bardzo przenośne polecenie.
źródło
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
i teraz możesz zrobić coś takiego:mysql -uroot -pSecretPassword ; forget
$s
i inne rzeczy w sed.function forget() { // put code here // }
Jeśli używasz zsh , możesz uruchomić:
Po tym ustawieniu każde polecenie zaczyna się od spacji zostanie wykluczone z historii.
Możesz użyć aliasów w
.zshrc
celu włączenia / wyłączenia :źródło
Można to osiągnąć na kilka sposobów. To ustawia rozmiar pliku historii na 0:
Spowoduje to ustawienie pliku historii na
/dev/null
skuteczne wyłączenie:W przypadku pojedynczych poleceń można poprzedzić je spacją i nie zostanie ono zapisane w pliku historii. Zauważ, że wymaga to włączenia
ignorespace
wartości do$HISTCONTROL
zmiennej środowiskowej (man bash i poszukajignorespace
więcej szczegółów).źródło
Jest to przydatne, jeśli chcesz usunąć całą historię, w tym fakt, że skasowałeś całą historię!
źródło
Musisz tylko uruchomić:
$ set +o history
Aby zobaczyć więcej, uruchom:
$ man set
źródło
set -x history
później polecenie odwrotne , działa.To polecenie może się przydać. Nie zarejestruje to wykonanego polecenia
źródło