2013-08-15 19 views
5

W dowolnym momencie mam 3 logowania do tego samego serwera. Jasne, że często korzystają z ekranu, ale zakładamy ten cel pozwala mi mieć:łączenie historii w tty

1 session running something 
1 session looking at output 
1 session shuffling files to/from various places 

Jeśli w dowolnym momencie tracę wszystkie trzy połączenia, tracę 2/3 mojej historii, a kiedy zalogować się ponownie, I pobierz historię z losowego 1 z moich trzech połączeń.

Czy istnieje sposób, aby to zatrzymać i połączyć wszystkie trzy pliki historii w 1?

Czy istnieje sposób zadeklarowania każdego logowania jako "ttyN", dzięki czemu każda z osobną historią będzie oddzielna, ale możliwa do odzyskania/ponownego podłączenia?

Dzięki!

+0

Czego potrzebujesz swojej historii? Rozwiązanie twojego problemu wydaje się nietrywialne od zera ... – Dru

+0

Możesz zdefiniować nazwę pliku historii, którego musi użyć bash. Plik jest napisany przy wyjściu z procesu bash. (Ale nigdy z niego nie korzystałem). Używając tego, możesz mieć 3 różne pliki historii, o ile uruchomisz bash z różnymi ustawieniami "HISTFILE" – tue

Odpowiedz

-1

Istnieje wiele opcji, które można ustawić, aby zapobiec nadpisywaniu historii Bash przez instancje Bash. Zobacz this FAQ dla pełnego wyjaśnienia:

w twojej .bashrc dodać

HISTFILESIZE=400000000 
HISTSIZE=10000 
PROMPT_COMMAND="history -a" 
export HISTSIZE PROMPT_COMMAND 
shopt -s histappend 
+0

Wygląda na to, że nie działa. Wstawiłem to do .bashrc, ponownie uruchomiłem (i tak trzeba), a przy ponownym logowaniu, polecenia tty z sesji 2 nie są w historii sesji 1. I na odwrót. –

+0

Zapobiega to tylko nadpisywaniu pliku historii przez różne powłoki. Nie tworzy historii z jednej działającej powłoki w innej w czasie rzeczywistym. Jeśli zamkniesz obie powłoki w dowolnej kolejności i rozpoczniesz trzecią, zobaczysz, że historia z obu jest dostępna w trzecim, a nie tylko przed rozpoczęciem. –

1

Możliwe rozwiązanie?

Po otwarciu twój terminal/screen

uruchomić powłokę z ustawieniem History-pliku:

HISTFILE=$HOME/session1-history bash 

i kontynuować pracę z tym bash. Aby uruchomić inną historię sesji

HISTFILE=$HOME/session2-history bash 

itp

0

Jeśli mam rozumieć wymagania prawo masz wiele sesji terminal otwarty i chce polecenia wprowadzone w jednej sesji mają być dostępne poprzez historię w innych sesjach.

trzeba umieścić te linie na górze ~/.bashrc:

export HISTFILESIZE=100000 
export HISTSIZE=100000 
# avoid & erase dups 
export HISTCONTROL=ignoredups:erasedups 
shopt -s histappend 
# save & reload history after each command enter in shell 
export PROMPT_COMMAND="\history -a; \history -c; \history -r; $PROMPT_COMMAND" 

Najważniejszy jest histappend który zapewnia, że ​​nowe linie historia są dołączane do pliku historii za każdym razem.

PS: Musisz nacisnąć klawisz Enter, aby zobaczyć ostatnio dodaną historię w każdej sesji.

Do roztworu bardziej wytrzymałej patrz: http://ptspts.blogspot.in/2011/03/how-to-automatically-synchronize-shell.html

0

Just Add to w pliku .bashrc.

# Avoid duplicates.. 
export HISTCONTROL=ignoredups:erasedups 

# Append history entries.. 
shopt -s histappend  

# After each command, save and reload history 
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" 

Znaleziono tę odpowiedź na ten Unix Stackexchange post.

Próbowałem tego i wydaje się działać na wielu terminalach jednocześnie, tylko złapać trzeba wykonać polecenie dla terminala, aby pobrać najnowszą historię z .bash_history.

Na przykład, jeśli otworzę pierwszy terminal i wpisz echo check 1, a następnie otwórz drugi terminal i wpisz echo check 2.Teraz, jeśli wrócę do pierwszego terminala i wcisnąłem klawisz "w górę", nie otrzymam echo check 2, ponieważ ostatni raz historia została pobrana z pliku historii, kiedy wykonałem poprzednie polecenie. Tak więc mogę po prostu nacisnąć Enter bez określania polecenia, a to spowoduje pobranie ostatnich wpisów historii. Teraz jeśli naciśniesz klawisz w górę, pojawi się echo check 2, co jest oczekiwanym zachowaniem.

1

Istnieje program do archiwizacji historii powłoki otwartej dla basha i zsh, który rozwiązałby twój problem (uwaga: napisałem i utrzymuję go).

https://github.com/barabo/advanced-shell-history

Chodzi o to, że polecenia są zapisywane w bazie danych sqlite3 przy użyciu wbudowanego haka bash. Jeśli naprawdę potrzebujesz wrócić i dowiedzieć się, jakie polecenia wprowadziłeś/jak długo działały/jakie były ich kody wyjścia - powinieneś spróbować.

To uratowało mnie wiele razy.