Comment démarrer l'écran avec plusieurs divisions directement à partir de la ligne de commande?

13

J'utilise screenaprès m'être connecté sshà mon serveur. À partir de maintenant, j'ai configuré les divisions dans ma fenêtre d'écran à la main et exécuté les commandes à la main comme indiqué dans la capture d'écran suivante:

entrez la description de l'image ici

  • La partie supérieure doit fonctionner tail -n 1 -f /home/server/log/access.log.
  • La partie inférieure droite doit fonctionner htop
  • Celui en bas à gauche doit simplement être une invite de commande

Existe-t-il un moyen de le faire via des commandes / scripts, donc je n'ai pas à le refaire à chaque fois à la main?

Videonauth
la source
@muru Cela répond tout à fait à la partie comment démarrer les écrans séparés, mais pas à la façon de les commander directement comme indiqué ci-dessus.
Videonauth
Tout ce qui peut être fait en utilisant des raccourcis dans l'écran peut être fait en utilisant des commandes dans .screenrc. Pour cet arrangement, nous avons la splitcommande .
muru

Réponses:

16

Pour le cas particulier des arrangements de fenêtre, il y a une commande d'écran pour les enregistrer dans un fichier: layout dump. De 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.

Donc, une fois que vous avez fait l'arrangement manuellement, appuyez sur Ctrla:, puis tapez layout dump /path/to/some/file. La mise en page sera enregistrée /path/to/some/fileet vous pourrez ensuite la restaurer dans une nouvelle session avec:

screen -c /path/to/some/file
muru
la source
+1 gentil; Le split -vsemble sans papiers :) c'est pourquoi je me débattais.
Videonauth
@Videonauth, il est en fait documenté dans la section des raccourcis clavier par défaut. C-a | (split -v) Split the current region vertically into two new ones.
Sergiy Kolodyazhnyy
Oui, il semble que cela ne soit mentionné que dans la page de manuel, à côté C-a |, mais pas dans les documents GNU
muru
Vous avez trouvé un comportement étrange que vous voudrez peut-être mentionner: si vous tapez par exemple, layout dump ~/layoutle processus échouera, il doit avoir le chemin complet (par exemple /home/$USER/layout)
Videonauth
@Videonauth puisque l'expansion de tilde est généralement effectuée par le shell, il n'est pas surprenant qu'une commande donnée ne la supporte pas en interne. Certains le font, la plupart ne le font pas.
muru
10

J'ai trouvé ce qui suit pour créer la sortie montrée dans ma question et en suivant l'excellente réponse de @ muru . L'utilisation layout dumpm'a donné ce qui suit:

split
focus
split -v
focus

Remarque: l' ~expansion de Tilde ( ) ne fonctionne pas avec layout dumpdonc au lieu de ~/layout.dmppar exemple vous auriez besoin d'utiliser /home/<username>/layout.dmp.

À partir de laquelle j'ai ensuite créé ce qui suit .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

Il ne me reste plus qu'à taper screenet à démarrer ma mise en page souhaitée. Je laisse cela ici comme exemple pour ceux qui se demandent, mais n'oubliez pas de voter pour la réponse de @ muru, car c'est lui qui m'a permis de résoudre ce problème.

Videonauth
la source