Czy mogę zapisać dane wyjściowe z poprzedniego polecenia terminala, używając tylko klawiatury?


12

Ostatnie dwie godziny spędziłem na uruchomieniu ddpolecenia (lub zobrazowania dowolnego podobnego scenariusza „trudnego do ponownego wykonania”) z płyty CD na żywo bez GUI; wszystko, co mam, to mój sprawdzony CTRL+ALT+F#terminal Bash „multi-window” ( ).

Niestety, podczas polecenia ddwyrzuciłem kilka nieprzyjemnych komunikatów o błędach i trochę więcej informacji, które chciałbym zachować. Mam podłączony dysk USB, do którego mogę zapisywać dane, ale jak mogę zapisać poprzednie wyjście jako plik tekstowy po uruchomieniu polecenia?

Gdyby to był emulator terminala w ładnym GUI, po prostu użyłbym myszy do zaznaczenia tekstu, skopiowania go i wklejenia do dokumentu. I gdybym wiedział, że polecenie spowodowałoby błędy, od razu wyrzuciłbym je do pliku, ale niestety dodatkowe dane wyjściowe były zaskoczeniem.

Jak zapisać dane wyjściowe tekstu z poprzedniego polecenia do pliku bez ponownego uruchamiania polecenia? Czy to w ogóle możliwe?


Szukałem sposobów zaznaczania tekstu na ekranie, ale jak dotąd znajduję sposoby na zrobienie tego przy użyciu tekstu wprowadzonego w monicie.
IQAndreas

Czy próbowałeś użyć przekierowania wyjściowego?
eyoung100

2
@ eyoung100 Czy to inne słowo oznaczające „piping”? Jak w dd if=/dev/sda of=/backups/sda.img > result.txt. Jeśli tak, problem polega na tym, że już uruchomiłem ddpolecenie . Za wszelką cenę chcę uniknąć ponownego uruchomienia polecenia, co w niektórych sytuacjach jest niemożliwe.
IQAndreas

2
Zakładając, że jest to Linux: zainstaluj gpm . (Uruchom w razie potrzeby, np service start gpm.). Zmieść region, przytrzymując lewy przycisk myszy. Wpisz cat > outputfilei kliknij prawy przycisk myszy, aby wkleić wybrany region.
Mark Plotnick

1
Jeśli celem jest wyłącznie „zachowanie… [] informacji”, w ostateczności należy chwycić aparat i zrobić zdjęcie ekranu. (I teoretycznie można na tym uruchomić OCR).
Scott

Odpowiedzi:


15

Jądro Linux powinno przechowywać dziennik ekranowy dla twojego vts w odpowiednim /dev/vcsa*[ttynum]urządzeniu.

Właśnie dlatego następujące działania:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

... które drukuje ...

hey       

Odpowiednie /dev/vcsa[ttynum]urządzenie zapisze zakodowaną wersję sformatowanego tekstu na ekranie, podczas gdy /dev/vcs[ttynum]będzie to zwykły zrzut. Te vcsa[ttynum]urządzenia będą kodować parę bajtów opisujących każdy char na ekranie i jego atrybuty, a także ciąg na czele każdej strony logicznej, która wskazuje odwołuje TTY za wiersze, kolumny liczyć.

Jak wskazuje @kasperd, wcześniej się myliłem, zakładając, że \aBEL został zakodowany między każdą postacią, podczas gdy w rzeczywistości: Domyślna kombinacja kolorów pokrywa się z postacią dzwonka.

Do swoich celów korzystanie z /dev/vcs[ttynum]jest prawdopodobnie najłatwiejsze. Oto look na różnice:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

... drukuje ...

hey       $

...i...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

... drukuje ...

0\200\000\004h\ae\ay\a$

1
vcsanie umieszcza tego samego znaku między wszystkimi postaciami. Daje ci parę bajtów mówiących, która postać jest na ekranie i jaki ma kolor. Domyślna kombinacja kolorów pokrywa się ze znakiem dzwonka.
kasperd

@kasperd - dziękuję. Czy lepiej?
mikeserv

Tak lepiej 👍
kasperd

2

Przejdź do (/ zaloguj się) innego terminala i uruchom sudo screendump N > screenoutput.txt, gdzie Njest numer żądanego terminala.

Obawiam się, że nie ma zaległości. Jeśli te wirtualne konsole je posiadają, nigdy ich nie widziałem. Ale to wszystko, co możesz zobaczyć na tym terminalu.


jeśli to działa, to prawdopodobnie dlatego, że pobiera je z /dev/vcsa*[1-9]*- (to, jak sądzę, po to są uprawnienia administratora) . Sądzę, że konsole linux wspierały zaległości w większości serii 3. *. Nie jestem pewien, jak można go złapać (w przeciwieństwie do korzystania z /dev/vcsa*[1-9]*urządzeń), ale może jest jakiś sposób.
mikeserv

Lepiej nie przełączać się na inną konsolę, ponieważ przełączanie usuwa zaległości, zachowując tylko to, co jest obecnie widoczne na ekranie.
Gilles „SO- przestań być zły”

@mikeserv Tak. Cóż, strona podręcznika wydaje się mówić, że używa zarówno /dev/vcs$i i /dev/vcsa$i. Daje to jednak czytelny wynik. ;-)
Sidhekin,

@Gilles Ach, więc jest zaległość? Ale screendumpnie rozumiem, nawet jeśli pozostanę w tej samej konsoli.
Sidhekin,

1
Możesz zobaczyć przewijanie, wpisując Shift-PageUp jeden lub więcej razy. Nie znam innego sposobu na przyciągnięcie tekstu w przewijaniu niż użycie myszy przez gpm.
Mark Plotnick
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.