J'ai un répertoire personnel partagé qui est monté automatiquement via NFS sur tous les serveurs UNIX auxquels je me connecte. Je voudrais avoir un seul .screenrc qui (par exemple) place le nom d'hôte dans la ligne hardstatus dans une couleur différente pour indiquer quand je suis connecté à la production par rapport au développement; nos noms d'hôtes sont tels que cela peut facilement être fait grâce à l'utilisation de la correspondance de modèles.
Existe-t-il un moyen de mettre des instructions conditionnelles dans .screenrc? Un rapide aperçu de la page de manuel ne semble rien révéler d'évident.
MODIFIER:
Pour clarifier, j'ai déjà une ligne d'état dur personnalisée; Je souhaite modifier certains des coloris / champs affichés en fonction du nom d'hôte sur lequel l'écran est invoqué. J'ai déjà quelque chose comme ça pour ma PS1, mais je préfère le faire dans la ligne d'état de l'écran lorsque je saute de ces hôtes aux routeurs / commutateurs, ce qui ne me permet pas de coloriser rapidement. De cette façon, je peux avoir une fenêtre pour la production et une pour le développement, la couleur de la ligne d'état de l'écran me disant sur laquelle je suis en un coup d'œil.
la source
Réponses:
Je vois deux façons de le faire, la première consiste à créer un fichier .screenrc par hôte.
Comme
.screenrc_serverA
,.screenrc_serverB
...dans votre jeu screenrc à quelque chose comme script de démarrage du shell
.screenrc_`hostname`
Bien sûr , vous pouvez utiliser la commande source de l' écran pour inclure quelque chose comme
.screenrc_default
dans chaque .screenrc_ personnalisé ... les fichiers afin qu'ils ne contiennent une ligne de légende / hardstatus et non la configuration entière à chaque fois.La deuxième façon serait d'exécuter des commandes comme
screen -X hardstatus lastline ...
(en utilisant des tests if pour exécuter la commande avec une valeur différente pour ... selon le nom d'hôte) dans votre script de démarrage du shell. Lorsque vous vous connecterez au serveur, screen -X ne fera rien car screen ne sera pas encore lancé, mais chaque fois que vous ouvrirez une nouvelle fenêtre dans screen, le hardstatus sera mis à jour.Bien sûr, la 1ère solution est meilleure car la seconde actualisera la ligne hardstatus chaque fois que vous ouvrirez une fenêtre de news ce qui est probablement inutile car le nom d'hôte n'aura pas changé.
la source
hostname
". J'ai eu un problème pour inclure `dans le post@radius est parfait avec le truc SCREENRC, mais ce n'était pas une réponse très complète, donc je vais élaborer…
~ / .bashrc
* Utilisez toujours de nouveaux tests !
Un mot sur les personnages d'échappement
La bonne façon d'inclure des couleurs dans les scripts est d'utiliser tput et non des caractères d'échappement. Vos personnages d'échappement sont spécifiques à votre terminal. La commande tput est compatible avec le terminal. J'ai écrit ceci quand j'ai besoin de me faire plaisir dans mes scripts:
~ / bin / COLORS.sh
J'ai également fait un script pour démontrer l'utilisation de tput. Vous pouvez l'obtenir à partir de cet essentiel.
Voir:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
la source
setaf
- plan est également utilisé, bien qu’il devrait l'êtresetab
( b au lieu de f ) et le second que l'utilisation9
par défaut ne fonctionne pas pour moi, peut-être parce que la version tput n'est pas standard (soit dans son cas ou le mien, je ne sais tout simplement pas et ça n'a pas vraiment d'importance)Il suffit de le définir dans votre .screenrc comme variable hardstatus. Tant que vous utilisez une variable comme% H pour le nom d'hôte, elle changera pour correspondre à tout nom d'hôte sur lequel vous travaillez.
Vous donnera une ligne d'état en bas qui ressemble à
le nom d'hôte est rouge sur noir, l'heure est verte sur noir, la date est jaune sur noir. la fenêtre marquée d'un * est la fenêtre actuelle, affichée en texte bleu sur fond blanc. la fenêtre marquée par - est la fenêtre précédemment active, avec du texte blanc sur noir. la fenêtre 1, ci-dessus, n'est ni actuelle ni précédente, et serait affichée en blanc sur noir. les autres possibilités vous montreraient d'autres utilisateurs attachés aux fenêtres, blanc sur noir, et seraient marqués par +.
l'affichage de l'heure aide également à garder la vie active si vous utilisez des serveurs distants pour exécuter l'écran, car le changement d'heure chaque minute gardera votre session active, même si le shell est inactif du côté distant.
la source
Vous pouvez colorer la ligne d'état à partir d'un script de backtick en l'imprimant
\005{..r}
ou similaire (r
pour le rouge, etc. comme dans le.screenrc
lui - même), vous pouvez donc soit hacher le nom d'hôte pour arriver à un nombre, soit simplement avoir un tas d'instructions conditionnelles à définir la couleur. À titre d'exemple, voici un script pour changer la couleur et imprimer le nom d'hôte à utiliser dans l'écran:Vous ajoutez ensuite une entrée pour ce script à la
.screenrc
et la référencez dans le hardstatus ou la légende en tant que% 4`:Cela suppose que le nom d'hôte est peu susceptible de changer, d'où le délai d'expiration et la validité de 1 heure (3600 secondes); les bits entourant l'appel au backtick lui-même viennent de mettre la date au début de la ligne et l'heure après le nom d'hôte.
Vous pouvez même utiliser ce mécanisme pour colorer la sortie d'un script en fonction de la valeur du niveau de charge de la batterie, de la charge du système ou de la température, en supposant que vous ayez accès aux valeurs pertinentes à partir d'un script shell.
la source
screen
évasion\005
- de cette façon, tout le formatage conditionnel peut être mis dans un script shell beaucoup plus lisible au lieu de ceux déjà difficiles à analysercaption
resp.hardstatus
directives d'écran.Si vous voulez éviter beaucoup de scripts, vous pouvez essayer ceci:
grep n'imprimera le nom d'hôte que s'il correspond à "prod", vous pouvez donc le brancher à un backtick et à la
%?
construction. Alto!la source