Jak edytować historię terminali Mac OS X?

12

Jak edytować historię bash w Mac OS X? Przez pomyłkę wpisałem hasło w tym oknie i nie chcę usuwać całej historii.

Karthick S.
źródło

Odpowiedzi:

14

Edycja .bash_historyto tylko kwestia otwarcia pliku za pomocą edytora. Można to osiągnąć na kilka sposobów.

  1. W Terminalu po prostu wpisz vi ~/.bash_history, a następnie edytuj plik zgodnie z potrzebami i zapisz. Ta opcja może być trudna, jeśli oczywiście nie jesteś przyzwyczajony do vi .
  2. Spraw, aby plik był widoczny , postępując zgodnie z tymi instrukcjami, na przykład otwórz go jak każdy inny plik, zmodyfikuj i zapisz.
  3. W terminalu po prostu wpisz open ~/.bash_history -a /Applications/TextEdit.app. To polecenie otworzy plik za pomocą TextEdit , możesz oczywiście wybrać dowolny inny edytor tekstu. Zmodyfikuj plik i zapisz.

Aby zmiany były zauważalne, po prostu uruchom ponownie bash.

Thecafremo
źródło
Otrzymuję „odmowę zgody”. Kiedy robię sudo, nie widzę wszystkich wprowadzonych poleceń.
Karthick S
1
@KarthickS Robisz to, co dokładnie robisz?
Thecafremo
Jeśli spojrzę na zawartość .bash_history, zawartość różni się od wyniku polecenia historii. Rozumiem oba, zawartość pliku jest starsza. Co się stanie, jeśli otwartych jest wiele okien poleceń? Wydaje się, że nie mają tej samej historii poleceń. PS Sprawdziłem, że używam bash.
Victor Engel
1
Myślę, że znalazłem swoją odpowiedź. ECHO $ ​​HISTFILE pokazuje ten do edycji.
Victor Engel
10

W typie terminala historyzanotuj numer linii. Następne poł history -d noted-line-number. Możesz sprawdzić, czy linia została usunięta, używając historyponownie.

Bez nazwy_1
źródło
2
To nie działa na Yosemite z ZSH.
Paulo Oliveira,
Pytanie dotyczyło basha, a nie zsh. Przeczytaj uważnie!
Bez nazwy_1
1
@DmitryDupelov masz rację, przepraszam, że przeszkadzam. W każdym razie jest to przypomnienie dla przyszłych czytelników (które również mogą pominąć ten szczegół). Dziękuję za poprawienie mojego komentarza.
Paulo Oliveira,
2
nano ~/.bash_history

kiedy to zrobisz ctrl+x i wróć, by zaakceptować poprawną odpowiedź, koleś

Matian2040
źródło
0

Myślę, że odpowiedź Dmitry'ego jest idealna, jeśli zostanie wykonana przed zapisaniem historii - domyślnie zapisywanie następuje przy wyjściu z powłoki / terminala.

Jeśli mogłeś już zapisać historię w ~ / .bash_history, wtedy wolę odpowiedź Thecafremo, ale sugerowałbym dodanie kroku wyjścia z terminalu, aby upewnić się, że żadna z instancji bash nie załadowała historii i nie zapisze jej ponownie. Jest to szczególnie trudne, jeśli masz wiele terminali i włączyłeś dowolną aktualizację historii poleceń.

Tło:

  • bash zapisuje historię w instancji powłoki
  • bash może zapisać tę historię do pliku, co zwykle dzieje się po wyjściu z powłoki / terminalu
  • bash może czytać z pliku do historii, co zwykle dzieje się po otwarciu powłoki / terminala
  • możliwa jest zmiana domyślnego zachowania, dzięki czemu historia szybciej się propaguje, co umożliwia migrację BAD_TEXT do pliku i do innych okien

Niezależnie od wybranej metody dodam jeden krok: zweryfikuj sukces!

  1. Wyjdź z Terminal.app
  2. Ponownie otwórz Terminal.app
  3. Potwierdź, że obrażający tekst nie znajduje się w historii - najlepiej w taki sposób, aby nie tworzyć dodatkowej historii. To znaczy nie rób grep BAD_TEXT .bash_history! To nowe polecenie przejdzie do historii. Po prostu otworzę .bash_history w twoim ulubionym edytorze i wyszukaj w nim BAD_TEXT.

To powinno dać ci spokój, że wyeliminowałeś BAD_TEXT bez względu na to, jaki rodzaj szalonej konfiguracji basha możesz napotkać.

szałwia
źródło