Zauważ, że jeśli celem jest ukrycie haseł w argumentach wiersza poleceń, będą one nadal widoczne przez ps
Benitok
Odpowiedzi:
36
i właśnie przypomniałem sobie inną odpowiedź, ta jest faktyczną odpowiedzią na twoje pytanie.
jeśli masz „ignorowanie” w HISTCONTROL, to bash nie zapamięta żadnej linii rozpoczynającej się spacją. nie pojawi się nawet w bieżącej historii powłoki, nie mówiąc już o zapisaniu do $ HISTFILE.
np. mam eksport HISTCONTROL = 'ignoreboth: erasedups' w moim ~ / .bashrc
oto szczegóły ze strony man bash:
HISTCONTROL
Rozdzielona dwukropkami lista wartości kontrolujących działanie poleceń
zapisane na liście historii. Jeśli lista wartości zawiera
bez względu na to, wiersze zaczynające się od znaku spacji nie są
zapisane na liście historii. Wartość zignorowanych powoduje linie
dopasowanie do poprzedniego wpisu historii, aby nie zostać zapisane. Wartość
ignoreboth jest skrótem od ignorowania i ignorowania. Wartość
z wymazanych powoduje, że wszystkie poprzednie linie pasują do bieżącej linii
do usunięcia z listy historii przed zapisaniem tego wiersza.
Wszelkie wartości niewymienione na powyższej liście są ignorowane. Jeśli HISTCONTROL jest
unset lub nie zawiera poprawnej wartości, wszystkie linie odczytywane przez
parser powłoki jest zapisywany na liście historii, z zastrzeżeniem wartości
HISTIGNORE. Druga i kolejne linie wielu linii
złożone polecenie nie jest testowane i są dodawane do historii
niezależnie od wartości HISTCONTROL.
Oto kilka lekcji historii, które wyciągnąłem z Google:
Możesz ustawić historię tak, aby ignorowała niektóre ciągi. W tym przykładzie zignorowałem polecenia ls, passwd i wszelkie polecenia poprzedzone spacją znaków.
Jeśli chcesz tylko usunąć ostatnie polecenie z historii, możesz nacisnąć Up-arrow, a następnie Ctrl - U(usunąć do początku wiersza), a następnie Up-arrowponownie.
Możesz usunąć dowolną pojedynczą linię z historii w ten sposób. Wystarczy użyć strzałki w górę, wyszukiwania lub cokolwiek Ctrl - U, aby ustawić bieżący edytowany wiersz poleceń, a następnie nacisnąć , a następnie Up-arrowlub, Down-arrowaby przejść do innej linii historii.
Odkryłem to przypadkiem przed laty. Nie mam pojęcia, czy jest to udokumentowane, czy nie.
Zasadniczo jednak łatwiej jest nie zapisywać historii bieżącej powłoki za pomocą:
HISTFILE
Nazwa pliku, w którym zapisana jest historia poleceń (patrz JEGO-
TORY poniżej). Wartość domyślna to ~ / .bash_history. Jeśli nie jest ustawiony,
historia poleceń nie jest zapisywana, gdy powłoka interaktywna
wychodzi.
Nie sądzę, żeby to zapobiegało pojawianiu się polecenia w lokalnej historii powłoki przed zamknięciem powłoki.
Po uruchomieniu polecenia i ponieważ usuwa ono również samo polecenie, przejście w górę ze strzałką nie spowoduje wyświetlenia polecenia, więc jeśli planujesz często go używać, najlepiej byłoby utworzyć alias:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Odpowiedzi:
i właśnie przypomniałem sobie inną odpowiedź, ta jest faktyczną odpowiedzią na twoje pytanie.
jeśli masz „ignorowanie” w HISTCONTROL, to bash nie zapamięta żadnej linii rozpoczynającej się spacją. nie pojawi się nawet w bieżącej historii powłoki, nie mówiąc już o zapisaniu do $ HISTFILE.
np. mam eksport HISTCONTROL = 'ignoreboth: erasedups' w moim ~ / .bashrc
oto szczegóły ze strony man bash:
źródło
Oto kilka lekcji historii, które wyciągnąłem z Google:
Możesz ustawić historię tak, aby ignorowała niektóre ciągi. W tym przykładzie zignorowałem polecenia ls, passwd i wszelkie polecenia poprzedzone spacją znaków.
Aby wyłączyć historię sesji, możesz wydać:
Odniesienie
źródło
Jeśli chcesz tylko usunąć ostatnie polecenie z historii, możesz nacisnąć Up-arrow, a następnie Ctrl - U(usunąć do początku wiersza), a następnie Up-arrowponownie.
Możesz usunąć dowolną pojedynczą linię z historii w ten sposób. Wystarczy użyć strzałki w górę, wyszukiwania lub cokolwiek Ctrl - U, aby ustawić bieżący edytowany wiersz poleceń, a następnie nacisnąć , a następnie Up-arrowlub, Down-arrowaby przejść do innej linii historii.
Odkryłem to przypadkiem przed laty. Nie mam pojęcia, czy jest to udokumentowane, czy nie.
Zasadniczo jednak łatwiej jest nie zapisywać historii bieżącej powłoki za pomocą:
źródło
Możesz rozbroić
HISTFILE
zmienną. Odman bash
:Nie sądzę, żeby to zapobiegało pojawianiu się polecenia w lokalnej historii powłoki przed zamknięciem powłoki.
źródło
Czasami tak robię
źródło
Widzę, że nikt nie napisał tej metody, więc zrobię to.
history -d
usuwa wspomniany wpis z historii.HISTCMD
przechowuje numer komendy, która ma zostać wykonana w następnej kolejności. Tak więc (HISTCMD-1) odnosi się do ostatnio wykonanego polecenia.Zrobiłem krótki film bash, który pokazuje, jak to działa: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
Po uruchomieniu polecenia i ponieważ usuwa ono również samo polecenie, przejście w górę ze strzałką nie spowoduje wyświetlenia polecenia, więc jeśli planujesz często go używać, najlepiej byłoby utworzyć alias:
Następnie możesz zrobić:
źródło