J'utilise Ubuntu et je peux changer manuellement la bash
couleur de l'invite du shell en vert en utilisant
export PS1="\e[0;32m[\u@\h \W]\$ \e[m"
Cependant, je veux que la couleur de l'invite du shell change automatiquement chaque fois que j'ouvre un nouveau terminal ou un nouvel onglet. Je sais que le terminal tty de base a 16 couleurs, et il est correct de faire pivoter les couleurs si plus de 16 terminaux sont ouverts. La solution fonctionnera-t-elle également lorsque je me connecte via Putty
, tmux
ou screen
.
Mon idée est d'écrire un script shell et de le placer dans .bashrc
lequel détecte la nouvelle session de terminal que l'utilisateur a ouverte et incrémente un compteur global de \e[0;31m[
à \e[0;47m[
. Comment détecter le nombre de terminaux ouverts par l'utilisateur?
la source
tty
. Je suppose que nous / les autres nous sommes trop concentrés sur cette "question" et avons oublié qu'il pourrait y avoir d'autres solutions pour le "besoin" entier :) Je jouerais même avec l'implémentation d'un sélecteur de couleur aléatoire. S'il s'agit de 256 couleurs, la sélection de couleurs identiques / similaires ne devrait pas se produire beaucoup. Cependant, le réglage manuel des couleurs pour des nombres de points donnés donnera une meilleure personnalisation.color="\e[38;5;"$(((RANDOM % 231 )+1))"m"
(seulement 231 pour rejeter les niveaux de gris), cependant beaucoup de ces couleurs se sont avérées être simplement des nuances différentes et quelques-unes sont sombres, donc elles pourraient être presque invisibles et je pense que personne ne les utilisera dans la vraie vie ...Dans une situation d'utilisateur unique, si nous prenons l'exemple de
xterm
, nous pouvons simplement compter le nombre de pids dexterm
;xterm
crée un pid distinct pour chaque fenêtre.gnome-terminal
exécute cependant un seul pid, mais la bonne nouvelle est qu'il crée un processus enfant pour chaque fenêtre et / ou onglet. nous pouvons récupérer ces processus enfants par la commande:Il y a cependant quelques complications à gérer:
En lisant votre question, nous pouvons supposer que l' utilisateur dans ce cas est en fait le propriétaire de la x-session . Habituellement, nous pouvons simplement utiliser la
$USER
variable -variable, mais cela peut ne pas correspondre à l'utilisateur actuellement connecté de$DISPLAY
.Dans une situation multi-utilisateurs, les pids appartenant à l'application terminale (ou laquelle) n'appartiennent pas nécessairement au courant
$DISPLAY
. Nous devons séparer uniquement les pids et les pids enfants pertinents.Sous Unity (15.10 ou inférieur), si un deuxième utilisateur se connecte, un processus supplémentaire est démarré (
gnome-pty-helper
), qui apparaît comme un processus enfant dansgnome-terminal
, mais le processus (évidemment) n'a ni fenêtre ni onglet. Sur Mate , le processus existe quand même.En bref
Pour compter le nombre d'onglets et / ou de fenêtres d'une application de terminal, nous devons:
$DISPLAY
(x-session)$DISPLAY
gnome-pty-helper
s'exécute, pour corriger le nombre.Cependant, cela peut très bien être scripté, pour trouver de manière fiable le nombre de fenêtres et / ou d'onglets actuellement ouverts.
Le scénario
Dans le script ci-dessous, l'application de terminal ciblée est utilisée comme argument . Le script fonctionne sur de nombreux terminaux sur lesquels je l'ai testé. Une exception est
Tilda
en ce moment.Un exemple
gnome-terminal
fenêtres, un (celui de l'image) avec troisgnome-terminal
fenêtres et deuxxterm
fenêtres.La commande:
les sorties:
tandis que
les sorties:
Le scénario
Utiliser
Copiez le script dans un fichier vide, enregistrez-le sous
get_terms.sh
, rendez-le exécutable et exécutez-le par la commande:la source
gnome-pty-helper
cours d'exécution, même lorsqu'il n'y a qu'un seul utilisateur connecté (juste après le redémarrage) et lorsque j'ouvre une quantité de terminaux, il fonctionne en deuxième, même aide. Votre nouveau script semble fonctionner pour mate-terminal (n'a pas pu provoquer ce zéro-chose), mais avec xterm, quand je n'ai qu'un seul ouvert, il montre0
et commence à afficher un bon nombre seulement après le deuxième et avec gnome-terminal il en montre toujours un de moins (sortie0
quand un seul est ouvert).Une
awk
façon:Explication:
Dans la commande ci-dessus 1,
awk
est utilisée pour trouver le nombre de terminaux. Dans leawk
programme, il vérifie simplement le nombre de lignes renvoyées par la commande who - 1.la source
who | awk 'END{print NR - 1}'
puisque ce que vous voulez, c'est le nombre de lignes - 1.Un moyen simple peut également être juste de s'exécuter
System Monitor
(si vous démarrez à partir du terminal, vous devez écriregnome-system-monitor
) et sous l'onglet "Processus", organisez les processus en cours par nom et comptez le nombre d'occurrences deBash
dans la liste (ils seront tous ensemble si vous organisez par nom, il est donc facile de compter).Notez que vous devez rechercher
Bash
et nonGnome Terminal
si vous voulez voir le nombre de terminaux ouverts par utilisateur. Une fois que vous ouvrez un terminal,Gnome Terminal
il apparaîtra également dans la liste des processus, mais n'en restera qu'un même si plusieurs terminaux sont ouverts. Le bouton "Afficher"System Monitor
vous permet de définir les processus à afficher, par exemple. Tous les processus / processus utilisateur / actif ...la source