Przewiń ekran wewnętrzny lub wstrzymaj wyjście

382

Korzystam z ekranu do zadań w wierszu poleceń podczas zarządzania serwerami, na których pracuję. Zwykle uruchamiam małe polecenia (głównie zadania systemu plików), ale czasami uruchamiam bardziej rozbudowane zadania (takie jak DBA).

Wyjście z tych zadań jest dla mnie ważne. Ponieważ do swoich zadań używam Ubuntu i OS X (oba Terminal Windows), ale muszę używać ekranu, przewijanie nie jest dostępne, więc żadne długie wyjście (myślę, że 500-wierszowa tabela z zaznaczenia) jest dla mnie niewidoczne. Kółko myszy nie wchodzi w rachubę.

Kiedy mówię „przewijanie jest dla mnie niewidoczne, mam na myśli to:

top podczas korzystania z ekranu, w Mac OS X, podczas przewijania

Myślałem o dwóch opcjach:

  1. Wstrzymaj (myśl paginate ) wyjście określonego polecenia. Kiedy zaczyna się wyjście, pozwala mi czytać, co się dzieje, a następnie wciskam „Enter”, a następnie ciągnie się, aż nie będzie już nic więcej do pokazania.

  2. Przewiń ekran wewnętrzny. Ale nie wiem czy to jest możliwe.

Oczywiście nie wiem, czy te opcje są rzeczywiście możliwe . Jeśli tak, to jak je osiągnąć? Inne alternatywy zostaną dobrze przyjęte.

AeroCross
źródło

Odpowiedzi:

525

Screen ma własny bufor przewijania, ponieważ jest multiplekserem terminali i musi obsługiwać kilka buforów.

Może istnieje lepszy sposób, ale przyzwyczaiłem się do przewijania za pomocą „trybu kopiowania” (którego można użyć do kopiowania tekstu za pomocą samego ekranu, chociaż wymaga to również polecenia wklejania):

  • Kliknij kombinację prefiksów ekranu ( domyślnie C-a/ control+ A), a następnie naciśnij Escape.

  • Poruszaj się w górę / w dół za pomocą klawiszy strzałek ( i ).

  • Po zakończeniu naciśnij qlub, Escapeaby wrócić do końca bufora przewijania.

(Jeśli zamiast qlub Escapewciśniesz Enterlub Returnprzesuniesz kursor, wybierzesz tekst do skopiowania, a naciśnięcie go Enterlub Returndrugi raz go skopiuje. Następnie możesz wkleić, a C-anastępnie ].)

Oczywiście, zawsze można użyć morei lessdwa powszechnie stosowane pagery, które mogą być wystarczające dla niektórych poleceń.

njsg
źródło
5
Również naciśnięcie q powoduje wyjście z trybu kopiowania bez kopiowania czegokolwiek (i jest to jedno naciśnięcie przycisku mniej). Może to być wyjaśnienie vi, ale link jest teraz zepsuty.
Nathanael Farley
3
Również naciśnięcie [Esc] powoduje wyjście z trybu kopiowania.
Sopalajo de Arrierez
7
jakikolwiek sposób na stronę?
Sungguk Lim,
10
Bufor przewijania wydaje się obsługiwać polecenia podobne do vi: Cb i Cf do przewijania strony w górę / w dół.
Touko,
3
W trybie kopiowania działają moje przyciski PageUp i PageDown. Pierwsze naciśnięcie przenosi tylko jedną linię, a następnie strona wygląda normalnie.
Eliasz
171

Dobrym rozwiązaniem jest użycie screenbufora wskazanego przez njsg . Możesz również wyłączyć alternatywny bufor tekstowy w informacjach xterm termcap na ekranie. Po wyłączeniu możesz używać pasków przewijania (i kółka myszy) do przewijania w górę i w dół.

Dodaj to do swojego ~/.screenrc.

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@

Możesz przeczytać więcej dyskusji tutaj .

George M.
źródło
1
ustaw limit przewijania, wpisując Ctrl + A,:, wpisz „scrollback 10000” lub dowolną żądaną wartość liczbową
lobi
2
Korzystając z tego, działają także typowe skróty terminali Linux (shift + pg w górę / w dół home / end).
tokland
5
Już sama ta wskazówka zmusza mnie do ponownego rozważenia korzystania z ekranu ...
Fish Monitor,
5
+1 Bardziej eleganckie niż zaakceptowane rozwiązanie.
Ryan Yoosefi
9
daje ci tylko dane wyjściowe, które screenotrzymałeś od momentu jego uruchomienia - tj. ponowne podłączenie w innym miejscu oznacza, że ​​nie możesz przewinąć w górę i zobaczyć, co się stało wcześniej. ale nadal możesz odzyskać wcześniejsze dane wyjściowe, korzystając z rozwiązania w zaakceptowanej odpowiedzi - wtedy możesz ponownie użyć kółka myszy.
Phil
28

Wszystkie te odpowiedzi dotyczyły sposobu poruszania się w sesji ekranowej, ale wbudowana funkcja polecenia screen służy do przechowywania wszystkiego w pliku za pomocą -Largumentu zgodnie z instrukcją, która brzmi:

-L mówi ekranowi, aby włączył automatyczne rejestrowanie danych wyjściowych dla systemu Windows.

dzięki czemu możesz:

screen -L -S testscreen

i utworzy plik z screenlog.#miejscem, w którym #jest liczbą dla tego ekranu, zaczynając od 0.

Ma to wiele zalet, a najważniejsze dla mnie to:

  1. Rejestrowanie tego, co zrobiłem, ponieważ mogę zapisać plik dziennika w folderze projektu do wykorzystania w przyszłości.
  2. Możesz nieaktywnie i pasywnie monitorować proces:
    • Służy tailfdo monitorowania postępu w czasie rzeczywistym bez konieczności podłączania się do ekranu.
    • służy grepdo sprawdzania określonego terminu w dzienniku i generowania powiadomień (e-mail, wyskakujące okienko, voip itp.). Można to zastosować na wielu ekranach bez aktywnego patrzenia na nie.
Mehrad Mahmoudian
źródło
1
Nie byłem świadomy -Lflagi ekranu, jest to bardzo przydatne! +1
Kredns
1
po prostu chcę dodać więcej, screenlog.#jest generowany w tym samym folderze, w którym wykonuje się screenpolecenie
Lê Quang Duy
3

Udało mi się uzyskać podstawowe stronicowanie, przesyłając treści do more, na przykład:

ls -l | more

Lub, jeśli chcesz wydrukować kolory w przypadkach użycia takich jak podświetlanie składni, możesz użyć

ls -l --color=always | more

Rezultatem jest wyjście, które mogę łatwo przeglądać na jednym ekranie na raz. Nie próbowałem modyfikacji @ uther, ~/.screenrcale wydaje się to lepsze jako trwałe rozwiązanie, gdy mysz jest dostępna.

Aby to wypróbować, możesz przejść do emulatora BusyBox, a następnie ...

cd ~/bin
ls -l --color=always | more

Użyj spacji, aby przewijać wyniki ls -lpolecenia lub użyj klawisza Enter, aby przechodzić między wierszami wyników.

Michael Hogan
źródło