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


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ć.


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

-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'

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
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.