Jak uruchomić ekran z wieloma podziałami bezpośrednio z wiersza poleceń?

13

Używam screenpo zalogowaniu się sshna moim serwerze. Na razie konfiguruję podziały w oknie ekranu ręcznie i uruchamiam polecenia ręcznie, jak pokazano na poniższym zrzucie ekranu:

wprowadź opis zdjęcia tutaj

  • Górna część powinna się uruchomić tail -n 1 -f /home/server/log/access.log.
  • Prawa dolna część powinna się uruchomić htop
  • Lewy dolny powinien być po prostu wierszem poleceń

Czy jest jakiś sposób, aby to zrobić za pomocą poleceń / skryptu, więc nie muszę powtarzać go za każdym razem ręcznie?

Videonauth
źródło
@muru To dość odpowiada na tę część, jak uruchomić osobne ekrany, ale nie na część, w której mają być one uporządkowane bezpośrednio, jak pokazano powyżej.
Videonauth,
Wszystko, co można zrobić za pomocą skrótów na ekranie, można wykonać za pomocą poleceń w .screenrc. W tym układzie mamy na splitkomendę .
mur

Odpowiedzi:

16

W szczególnym przypadku ustaleń okiennych, istnieje komenda ekran, aby zapisać je do pliku: layout dump. Od man screen:

layout dump [filename]

Write to a file the order of splits made in the current layout. This is
useful to recreate the order of  your  regions  used  in  your  current
layout.  Only  the  current  layout is recorded. While the order of the
regions are recorded, the sizes of  those  regions  and  which  windows
correspond  to  which regions are not. If no filename is specified, the
default is layout-dump, saved in the directory that the screen  process
was  started in. If the file already exists, layout dump will append to
that file. As an example:

           C-a : layout dump /home/user/.screenrc

will save or append the layout to the user's .screenrc file.

Po ręcznym ustawieniu naciśnij Ctrla:, a następnie wpisz layout dump /path/to/some/file. Układ zostanie zapisany /path/to/some/filei możesz go przywrócić w nowej sesji za pomocą:

screen -c /path/to/some/file
muru
źródło
+1 fajny; split -vWydaje nieudokumentowane :) dlatego miałem problemy.
Videonauth,
@Videonauth to faktycznie jest udokumentowane w domyślnej sekcji skrótów klawiszowych. C-a | (split -v) Split the current region vertically into two new ones.
Sergiy Kolodyazhnyy
Tak, wygląda na to, że wspomniano o tym tylko na stronie podręcznika obok C-a |, ale nie w dokumentach GNU
muru
Znaleziono dziwne zachowanie, o którym warto wspomnieć: jeśli wpiszesz na przykład layout dump ~/layoutproces się nie powiedzie, musisz przejść pełną ścieżkę (tj. /home/$USER/layout)
Videonauth,
@Videonauth, ponieważ interpretacja tyldy jest zwykle wykonywana przez powłokę, nic dziwnego, że dane polecenie nie obsługuje jej wewnętrznie. Niektórzy tak, większość nie.
mur
10

Wymyśliłem następujące, aby utworzyć wynik pokazany w moim pytaniu i postępując zgodnie z doskonałą odpowiedzią @ muru . Używanie layout dumpdało mi następujące informacje:

split
focus
split -v
focus

Uwaga: ~Rozszerzenie Tilde ( ) nie działa, layout dumpwięc zamiast ~/layout.dmpna przykład musisz użyć /home/<username>/layout.dmp.

Z którego następnie stworzyłem następujące .screenrc

# create the top screen
chdir /home/server/log
screen -t "Apache Log" tail -n 1 -f access.log
# split the screen and focus onto the new created space
split
focus
#create the bash
chdir /home/server/log
screen
# split vertically and focus onto the new area
split -v
focus
# create the htop screen
screen -t "Htop" htop
# focus twice to end up with the bash area active
focus
focus

Teraz muszę tylko wpisać screeni uruchomić żądany układ. Zostawiam to tutaj jako przykład dla tych, którzy zastanawiają się, ale nie zapomnijcie głosować na odpowiedź @ muru, ponieważ to on sprawił, że mogłem to rozwiązać.

Videonauth
źródło