Mam długo działający skrypt i zapomniałem przekierować jego dane wyjściowe do pliku. Widzę to w terminalu, ale czy mogę zapisać go do pliku?
Nie pytam o tee
przekierowanie wyjścia (np >
, >>
) etc - komenda zaczęła, a ja nie mogę go uruchomić ponownie. Muszę zapisać już wygenerowane dane wyjściowe. Jeśli widzę to na moim wyświetlaczu, jest ono gdzieś przechowywane / buforowane / buforowane. Gdzie?
screendump
, /dev/vcsX
i tak dalej pozwala mi zapisać tylko ostatni ekran na wyjściu terminala (nie bieżący! - przewijanie terminala nie pomaga).
To jest na wirtualnej konsoli Linuksa, a nie na emulatorze terminali X11, takim jak gnome-terminal
mysz i inne gadżety.
/dev/
, prawda? W przeciwnym razie napisałeś, jak to osiągnąć.Odpowiedzi:
/dev/vcs[a]<n>
sprawi, że ostatni ekran będzie pełny, nawet jeśli przewinąłeś w górę, ale wybrana opcjaioctl()
sgpm
pozwoli ci zrzucić aktualnie wyświetlany ekran nawet po przewinięciu w górę.Możesz więc zrobić:
Dostosuj 80 i 25 do rzeczywistej szerokości i wysokości ekranu.
sleep 3
Daje czas do przewijania w górę (z Shift+PageUP) do rzeczywistego ekranu chcesz zrzucić.cat > file
przekierowuje wklej dofile
. Zakończ to za pomocą Ctrl+D.Zobacz
console_ioctl(4)
szczegóły.Jeśli masz
gpm
zainstalowany i uruchomiony, możesz dokonać wyboru za pomocą myszy.Przewijanie i wybór wirtualnej konsoli Linuxa jest bardzo ograniczony i dość irytujący (w tym momencie, gdy zmieniasz konsolę, tracisz całe przewijanie). Idąc dalej, sugeruję, abyś używał takich rzeczy jak GNU
screen
lubtmux
w nim (osobiście używam ich w jeszcze bardziej wydajnych terminalach). Dzięki nim możesz mieć większe przewijane strony do przeszukiwania i łatwo zrzucić je do plików (a nawet zalogować wszystkie dane wyjściowe terminala oraz wszystkie inne gadżety, które są dostarczane z tymi terminalowymi multiplekserami).Jeśli chodzi o automatyzację procesu zrzucania całego bufora przewijania, powinno to być możliwe w pewnych warunkach, ale dość trudne, ponieważ interfejs API jest bardzo ograniczony. Istnieje nieudokumentowane
ioctl
(TIOCLINUX, subkod = 13) przewijanie bieżącej konsoli wirtualnej o pewne przesunięcie (ujemne przy przewijaniu w górę, dodatnie przy przewijaniu w dół).Nie ma jednak sposobu (o którym wiem), aby poznać aktualny rozmiar bufora przewijania. Trudno więc wiedzieć, kiedy osiągnąłeś szczyt tego bufora. Jeśli spróbujesz przewinąć obok, ekran nie zostanie przesunięty o tyle i nie ma wiarygodnego sposobu, aby dowiedzieć się, o ile ekran faktycznie przewinął.
Uważam też, że zachowanie przewijanego ioctl jest nieprawidłowe (przynajmniej z konsolą VGA), gdzie przewijanie o mniej niż 4 linie działa tylko sporadycznie.
Poniższy skrypt wydaje mi się działać na konsolach bufora ramki (i czasami na VGA), pod warunkiem, że bufor przewijania nie zawiera sekwencji identycznych linii dłuższych niż jeden ekran plus jedna linia.
Jest dość powolny, ponieważ przewija jedną linię na raz i musi czekać 10 ms na eof podczas czytania każdego zrzutu ekranu.
Do użycia
that-script > file
z poziomu wirtualnej konsoli.źródło
https://github.com/jerome-pouiller/reredirect/ może być opcją?
Opis:
Składnia jest następująca:
źródło