historia bash dla bieżącej sesji

15

Może coś pomijam, ale czy istnieje sposób na uzyskanie bieżącej historii bash dla bieżącej sesji, której używasz

jeśli ucieknę

ssh host
$ pwd
$ ls
$ cd /tmp

Chcę tylko zobaczyć te 3 polecenia i nic więcej

Mikrofon
źródło
sprawdziłeś historypolecenie?
Hackaholic,
tak, wiem o historytym, ale to nie tylko moja sesja
Mike
Ilość zapamiętana między sesjami jest kontrolowana przez zmienną powłoki SAVEHIST, jeśli pamiętam. Tak więc, jeśli ilość historii, którą zapisałeś ostatnim razem, wynosiła ZERO, to dostaniesz historię dla bieżącej sesji powłoki (ale oczywiście nie na poziomach podrzędnych)
mdpc
@mdpc, jakie dokumenty czytasz? Na stronie podręcznika użytkownika Bash nie znajduję żadnego odniesienia do SAVEHIST, a jedynie do HISTSIZEi HISTFILESIZE.
Wildcard

Odpowiedzi:

15

Lekko ronda:

history -a ~/current_history

Spowoduje to zapisanie niezapisanej historii bieżącej sesji, do ~/current_historyktórej możesz następnie przejrzeć.

muru
źródło
to może działać, ale nie obsługuje wielu sesji. Przypuszczam, że mogę utworzyć losowy plik tymczasowy do przechowywania go
Mike
1
@Mike może użyć nazwy związanej z PID powłoki ~/$$_history.
muru
4
Warto zauważyć, że nie wyczyści to historii ani nie wpłynie w żaden sposób na zwykłe zapisywanie historii! Nie byłem pewien, dopóki go nie przetestowałem. :)
NHDaly
Uważam, że wygodniej jest po prostu history -arzucić to wraz z poprzednią historią do ~ / .bash_history ... co może być problemem, jeśli twoja historia jest dłuższa niż granica, czyli 1000 w moich systemach centos7 i fedora 24.
Ray Foss,
0

Miałem problem, że chciałem zapisać prąd historydo pliku, ale nadal chciałem, aby wpisy były zapisywane w głównym bashuhistory

Rozwiązałem to, dołączając plik za pomocą cat:

history -a current-history
cat current-history >> .bash_history
nath
źródło
-1

Służy compdo porównywania całej historii (w tym bieżącej sesji Bash) z już zachowaną historią .bash_historyi drukowania tylko tych wierszy, które są unikalne dla bieżącej sesji - które powinny pokazywać tylko te polecenia, które zostały wykonane od uruchomienia bieżącej powłoki Bash

comm -23 <( history | cut -c 8- ) ~/.bash_history

Edycja: jak wskazał @Wildcard, to polecenie nie działa dla wszystkich dystrybucji comm. Przetestowałem to na Mac OS.

Odmiana tego samego pomysłu przy użyciu diff:

diff <( history | cut -c 8- ) ~/.bash_history | sed -n 's/^< //pg'
Christian Kadner
źródło
Dobra myśl, ale bardzo niewiarygodna w moich testach. commzakłada posortowane dane wejściowe. Witamy w Stack Exchange! :)
Wildcard
@Wildcard, obie strony danych wejściowych commsą sortowane nieodłącznie w moim przykładzie powyżej. Uruchomiłeś to? I to nie wygenerowało twojej bieżącej historii sesji Bash?
Christian Kadner
Tak, zrobiłem i nie, nie zrobiłem tego. I nie, zawartość nie~/.bash_history jest sortowana; i nie jest w ogóle sortowany wynik po usunięciu numerów linii wiodących. (Poza tym oczekuje danych posortowanych leksykograficznie, a nie danych posortowanych numerycznie).historycomm
Wildcard
Racja, miałem na myśli, że oba argumenty commpolecenia w moim przykładzie są w tej samej kolejności, a nie że są posortowane leksykograficznie. Wersja FreeBSD commnie wymaga danych posortowanych leksykograficznie
Christian Kadner
Używam Mac OS X. Nie ma to z tym nic wspólnego. Patrząc bliżej, wydaje się, że są to wczesne polecenia z historii w pamięci, które zostały później nadpisane w pliku historii przez inne wychodzące powłoki.
Wildcard