comment inclure le nom de session de l'écran dans hardstatus?

17

J'utilise différentes sessions d'écran pour différents projets. Écran de démarrage comme screen -S project1. Maintenant, je voudrais mentionner «project1» dans la ligne hardstatus.

Nom de la session peut être obtenu à partir STY variable d'environnement: STY=13539.project1.
Mais comment mettre cela à l'écran? J'ai essayé la commande backtick et% `dans hardstatus, mais je n'arrive pas à faire les choses correctement.

Ce que j'ai fait:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

pas de chance, vide% `.

backtick 0 30 30 sessionname

toujours pas de chance, nom de session: introuvable

fungusakafungus
la source

Réponses:

18

Vous pouvez inclure cette chaîne (avec des informations supplémentaires, si vous le souhaitez) dans votre $PS1:

\[\e]0;$STY\007

à l'intérieur de guillemets simples afin de retarder l'évaluation de la variable. Ajoutez ensuite ceci à votre ~/.screenrc:

hardstatus string '%H:%h'

Malheureusement, screenne se définit pas $STYdans l'environnement des commandes qu'il génère pour la backtickfonctionnalité.

Une autre option, au lieu de celle ci-dessus:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

L'avantage de celui-ci est qu'il suit les modifications apportées à l'aide de la sessionnamecommande. La première option ne fonctionne pas.

Éditer:

D' ici :

Étant donné que $ STY n'est pas encore défini lorsque les sources d'écran .screenrc, vous pouvez utiliser cette astuce dans votre .screenrc:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

C'est-à-dire envoyer une commande d'écran à la première fenêtre.

En pause jusqu'à nouvel ordre.
la source
1
Pour la solution qui commence par backtick: (1.) backtickun bash est-il intégré? une commande gnu-screen? un exécutable binaire? existe-t-il une page de manuel? (2.) Je sais que cela fonctionne parce que je l'ai essayé, mais comment exécuter une commande sur deux lignes alors qu'il semble que la .screenrcsyntaxe gnu-screen nécessite une ligne pour la hardstatuscommande? (3.) comment pourrais-je modifier votre commande pour permettre d'ajouter du texte après le nom de la session?
Trevor Boyd Smith,
@TrevorBoydSmith: backtickest une screencommande. Recherchez-le dans la page de manuel de screen. Il serait préférable de publier une nouvelle question concernant le reste de ce que vous demandez. Je ne pense pas que la sortie hardstatus puisse occuper deux lignes à l'écran. Vous pouvez utiliser sedou awkau lieu de grepfaire ce qui grepest en train de faire dans mon exemple et également ajouter du texte supplémentaire.
pause jusqu'à nouvel ordre.
Quand j'ai dit "deux lignes", permettez-moi de répéter ce que je voulais dire, je ne veux pas d'un affichage sur deux lignes pour le hardstatus. J'étais confus par le %` et l' backtickêtre sur des lignes distinctes ... ils n'avaient pas l'air liés mais maintenant que j'ai lu la documentation carbacktick je vois que les deux sont liés / nécessaires / syntaxe valide (bien que la syntaxe soit assez étrange IMO).
Trevor Boyd Smith
3

Pour moi, cela fonctionne facilement avec l'insertion %Sdans le hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Cependant, cela affiche le nom de la session sans l'ID (comme ${STY#*.}); dans votre exemple: project1.

(Même réponse à d'autres questions ici et ici pour être complet).

Scz
la source
2
Pour info, le "% S" fonctionne sur les nouvelles versions de gnu-screen (fonctionne sur Fedora 21 pour moi) mais pas sur les versions plus anciennes (ne fonctionne pas sur CentOS 6 pour moi).
Trevor Boyd Smith,