Zapisać przewijanie bieżącego terminala do pliku?

24

Szukałem odpowiedzi na to pytanie i nie znalazłem niczego, co sprawiłoby, że uważam, że to niemożliwe, ale ...

Czy można zapisać bieżący bufor przewijania Gnome Terminal do pliku?

Wiem, że mogę zrobić coś takiego, command > output.txtaby przekierować wszystkie dane wyjściowe do pliku lub command | tee output.txtpodzielić dane wyjściowe na terminal, a także na plik. Staram się to uchwycić po fakcie. Chciałbym zapisać zawartość przewijania bieżącej karty terminala do pliku.

Karl Wilbur
źródło
kittyto jeden program terminalowy, który potrafi to zrobić, niestety czcionki wyglądają okropnie (brak renderowania subpikseli)
jberryman
Dzięki, @jberryman. Dobrze wiedzieć.
Karl Wilbur

Odpowiedzi:

37

Po krótkiej zabawie odkryłem, że możesz:

  • triple-click ostatnia linia
  • trafienie shift + home
  • shift + click Pierwsza linia
  • kopiuj za pomocą ctrl + shift + c(lub right-click> „Kopiuj”)

Teraz wklej go do pliku tekstowego ... lub używając xsel, możesz przesunąć schowek do nowego pliku, po prostu otwierając nową kartę i wykonując:

xsel -o > out.txt

(Aby zainstalować xselzrobić sudo apt-get install xsel)

Karl Wilbur
źródło
5
Podświetlanie można wykonać łatwiej: Edit-> Select All.
egmont
3
To świetna odpowiedź, ponieważ uświadamiasz sobie, że możesz użyć triple-click the last linei shift + home or the scrollbarprzejść do dokładnej lokalizacji, którą chcesz na początku danych wyjściowych.
Szef kuchni Faraon
2
Ostrzeżenie: nie próbuj tego z dużym scollback (wiele megabajtów), ponieważ może to zawiesić X (zdarzyło mi się).
Kevin Cox
W przypadku wielu megabajtów należy oczekiwać powolnego przetwarzania. Bądź cierpliwy i pozwól komputerowi działać. „Daj mu sekundę! Będzie w kosmosie! Czy możesz dać mu sekundę na powrót z kosmosu ?!”
Karl Wilbur
Właśnie próbowałem skopiować duży scrollback (wyjście rsync z kopii zapasowej kilku dysków 2 TB przez noc) przy użyciu metody Edit-> Select Alldo przechwycenia wyjścia. Minęło już 25-30 minut, a Gnome Terminal jest nadal zamknięty. Korzystając z Byobu, mogłem uruchomić, topaby zobaczyć, że Gnome Terminal nadal działa ( wydłużając czas procesora); obecnie zużywa ponad 4,176 g pamięci RAM i powoli się wspina. Tak, przy bardzo dużym przewijaniu zajmie to trochę czasu. X nadal działa (i Chrome, YouTube, Nautilus, Byobu itp.), Ale Gnome Terminal będzie potrzebował minuty. Powinienem był lepiej zaplanować.
Karl Wilbur 30.04.17
2

scriptpolecenie jest odpowiednie, gdy chcesz zapisać sesję terminala w pliku i wyświetlić ją później. Gdy zadzwonisz script, uruchomi powłokę, a kiedy skończysz, po prostu wpisz polecenie exit. Wszystko będzie w typescriptpliku, chyba że określisz inaczej.

Na przykład,

xieerqi:$ echo "Hello, Karl Wilbur"
Hello, Karl Wilbur

xieerqi:$ date
2015年 10月 27日 星期二 11:38:15 MDT

xieerqi:$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 80939384  28430924  75% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914832        4   2914828   1% /dev
tmpfs             585216     1100    584116   1% /run
none                5120        0      5120   0% /run/lock
none             2926072      328   2925744   1% /run/shm
none              102400       52    102348   1% /run/user

xieerqi:$ exit
Script done, file is typescript
xieerqi@eagle:~$ cat typescript 
Script started on 2015年10月27日 星期二 11时37分55秒

xieerqi:$ echo "Hello, Karl Wilbur"
Hello, Karl Wilbur

xieerqi:$ date
2015年 10月 27日 星期二 11:38:15 MDT

xieerqi:$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 80939384  28430924  75% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914832        4   2914828   1% /dev
tmpfs             585216     1100    584116   1% /run
none                5120        0      5120   0% /run/lock
none             2926072      328   2925744   1% /run/shm
none              102400       52    102348   1% /run/user

xieerqi:$ exit

Script done on 2015年10月27日 星期二 11时38分18秒

W pliku maszynopisu mogą być jednak znaki sterujące, na przykład z komendy ls, więc użyj cat typescript | col -b > outputfile.txtpolecenia, aby przekierować czyste wyjście do pliku

Sergiy Kolodyazhnyy
źródło
5
Dzięki, ale jest to coś, co należy zrobić, zanim zgromadzisz cenne informacje w swoim terminalu. Potrzebowałem rozwiązania po fakcie.
Karl Wilbur
1
To jednak bardzo dobrze wiedzieć. Spróbuję w przyszłości.
Karl Wilbur
@KarlWilbur :) Jestem pewien, że okażą się przydatne. Często go używam do odrabiania lekcji programowania. W rzeczywistości istnieje sposób na zrzucenie zawartości ekranu na konsole TTY, ale terminal gnome jest nieco trudniejszy
Sergiy Kolodyazhnyy
@SergiyKolodyazhnyy Próbuję zaimplementować to w moim skrypcie python, ale nie mogę wyjść ze skryptu, wykonując polecenie „os.system („ exit ”). Jednak wyjście z terminalu i zapisanie danych wyjściowych do pliku.
mtkilic
@mtkilic scriptPolecenie uruchamia oddzielny proces, więc skrypt python będący rodzicem podprocesu czeka na zakończenie przez dziecko. Jest to bardziej przeznaczone dla sesji interaktywnych, ale jeśli chcesz nagrać sesję w interprecie Pythona, scriptnajpierw uruchom komendę, a na drugim uruchom interpreter. Polecenie powinno również mieć -cflagę, aby można było zadzwonić, script -c pythonale należy dwukrotnie sprawdzić za pomocą man script.
Sergiy Kolodyazhnyy