Jak sprawić, by terminal przechowywał osobną historię dla każdej karty / okna?


13

Po ponownym uruchomieniu komputera Mac następuje prawidłowe zamknięcie i zapisanie buforów dla każdej karty, ponieważ jest tam ponownie, gdy komputer uruchamia się ponownie. Ale historia poleceń nie jest odpowiednio buforowana dla okna / karty. Wszystkie mają ten sam bufor.

Zakładam, że dzieje się tak, ponieważ bash używa tego samego ~/.bash_historydla wszystkich terminali, ale czy istnieje sposób, aby tego uniknąć ? Aby zrobić bash, a może Terminal, przechowywać je osobno?


Proszę zobaczyć ten post @ Błąd serwera, wyjaśnia, jak to zrobić.
— Mutant

Odpowiedzi:


7

Możesz zrobić coś takiego w swoim .bashrc:

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

Spowoduje to utworzenie osobnych plików historii w katalogu domowym, takich jak .bash_history_ttys002. Kiedy utworzysz nowe okno terminala, użyje ono pliku historii odpowiadającego nazwie tty, który zwykle będzie określony po prostu w kolejności, w jakiej utworzysz okno terminala.


Wielkie dzięki! Oznaczając to jako rozwiązane. Mimo że to zależy od tego, jak OSX ładuje terminale, mam wrażenie, że jest to najbliższe, jakie możemy uzyskać.
— Robert Sköld

Czy jest to również możliwe na zakładkę?
— Joshua Muheim

Każda karta to osobny login tty, więc powinna działać.
— Seth Noble

Terminal ma wyraźne wsparcie dla tego typu zachowania: gdy tworzy nowy terminal, przypisuje terminalowi unikalny identyfikator i przekazuje go do sesji terminala za pomocą zmiennej środowiskowej TERM_SESSION_ID. Gdy przywraca terminal dla Wznów, przywraca również ten sam identyfikator sesji, więc programy mogą go użyć do powiązania dowolnego stanu z przywróconymi terminalami. Użyj tego jako części nazwy pliku zamiast tty.
— Chris Page

@Chris Strona problem polega na tym, że sesja jest inna przy każdym uruchomieniu okna / karty. Stworzyłoby to osobne historie i nie łączyłoby ich między sesjami.
— Rene Wooller

5

Zaimplementowałem to, dodając

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

do mojego ~/.bash_profilepliku. Teraz, kiedy zamykam terminal i otwieram go ponownie, na każdej karcie przywracana jest osobna historia poleceń. Również podczas tworzenia nowej karty inicjowana jest historia domyślna.bash_history

Ponadto, aby Terminalaplikacja zachowała otwarte karty między zamknięciem i ponownym uruchomieniem, musisz upewnić się, że ta opcja "close windows when quitting app" (on Yosemite)jest wyłączona w System Preferences -> General.


0

Możesz ustawić niestandardową $ HISTFILE dla każdej instancji terminalu.


Czy istnieje sposób, aby to zrobić automatycznie dla każdej karty / okna terminala? I upewnij się, że używa tego samego, $HISTFILEgdy komputer uruchamia się ponownie?
— Robert Sköld,

1
Tak, można to zrobić, ale w jaki sposób miałbyś dostęp ponownie? Musisz ręcznie żonglować plikami, aby przejść do poprzednich plików historii.
— EmmEff,

@EmmEff Terminal ma jawne wsparcie dla tego typu zachowania: kiedy tworzy nowy terminal, przypisuje terminalowi unikalny identyfikator i przekazuje go do sesji terminala za pomocą zmiennej środowiskowej TERM_SESSION_ID. Gdy przywraca terminal dla Wznów, przywraca również ten sam identyfikator sesji, więc programy mogą go użyć do powiązania dowolnego stanu z przywróconymi terminalami.
— Chris Page
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.