Est-il possible d'obtenir le type de terminal avec une commande?
Si j'utilise gnome-terminal
, la sortie devrait être gnome-terminal
ou quelque chose de similaire. Il serait également intéressant d'obtenir la version du terminal.
Mise à jour
ps -aux | grep `ps -p $$ -o ppid=`
produira quelque chose comme ceci:
user 4239 0.0 0.7 292708 15744 pts/8 Sl 11:39 0:02 xfce4-terminal
user 4800 0.0 0.0 6176 820 pts/0 S+ 12:23 0:00 grep --color=auto 4239
Cela fonctionnera également avec xterm, mais comment obtenir uniquement le nom ( xfce4-terminal
dans ce cas)?
command-line
TuKsn
la source
la source
window 31457282 has no pid associated with it
(testé sur Lubuntu)Réponses:
Version originale
Pour ce faire, vous pouvez obtenir le processus parent de votre session shell actuelle et à partir de là le nom du terminal.
Récupère le parent du processus shell actuel. La variable bash
$$
est le PID de votre shell actuel, nous pouvons donc donner cela en tant que requête àps
(-p $$
) et lui demander d'imprimer le PID du processus parent (-o ppid=
, la fin=
est d'éviter d'imprimer les en-têtes de colonne):Ainsi, le PID du parent de mon shell est
544
.Obtenez le processus associé à ce PID et imprimez sa ligne de commande
La sortie ci-dessus dépendra de l'émulateur de terminal que vous utilisez, j'utilise
terminator
.Combinez tout en une seule commande
Utilisez-le pour obtenir la version
Ajoutez une petite fonction à votre
~/.bashrc
qui retourne le nom et la version de l'émulateur de terminal que vous utilisez (cela fonctionne pour les émulateurs de terminal les plus courants):Vous pouvez maintenant obtenir le nom du terminal et lui transmettre également toutes les options que vous souhaitez (telles que
--version
.Quelques exemples utilisant différents terminaux:
xterm
terminator
rxvt
, celui-ci n'a aucun des drapeaux ou-V
, donc aucune information de version n'est imprimée.-version
--version
gnome-terminal
.konsole
lxterminal
xfce4-terminal
Nouveau et amélioré
L'approche ci-dessus n'est cependant pas digne de confiance. Il s'étouffera lorsque vous exécutez votre shell après avoir
su
consulté un autre utilisateur ou lorsque votre terminal est associé à quelque chose et à divers autres cas. Comme nous travaillons évidemment avec des programmes X ici, une meilleure façon pourrait être d'utiliser quelque chose commexdotool
(installable avecsudo apt-get install xdotool
) pour obtenir les informations à la place:Ce qui précède imprimera la ligne de commande utilisée pour lancer la fenêtre actuellement active. Étant donné que votre terminal sera probablement actif, c'est la commande qu'il affichera. Cela signifie que pour la plupart des émulateurs de terminaux, vous pouvez supposer en toute sécurité que le 1er champ renvoyé est le nom du terminal:
Cela signifie que l'obtention de la version est triviale. Par exemple
Ce n'est pas le cas pour
gnome-terminal
:ou
terminator
:Donc, nous pouvons le rendre un peu plus complexe (il y a des bashismes ici, celui-ci n'est pas portable):
Cela fonctionne pour tous les cas sur lesquels j'ai testé.
la source
$PPID
pour obtenir le PID du processus parent.ksh
outcsh
. C'est une très bonne idée pour la famille bash car c'est beaucoup plus simple que mon approche.ksh93
et enmksh
.Essaye ça,
OU
la source
rxvt
etterminator
et la seconde échoue suruxterm
etgnome-terminal
(il imprime/usr/lib/gnome-terminal/gnome-terminal-server
). Ils échoueront tous (comme le mien) si vous utilisez une session su.$PPID
est le PID du processus parent du shell.comm
signifie commande . Il peut ou non s'agir d'un chemin complet, nous utilisons doncbasename
pour supprimer le chemin si nécessaire.Avertissements
Celles-ci s'appliquent probablement à au moins certaines des autres réponses également.
comm
est techniquementargv[0]
, qui peut en fait être une chaîne arbitraire. Mais en général, vous devriez pouvoir vous y fier pour ce cas particulier.Cela ne fonctionnera pas comme prévu si vous vous connectez via SSH ou utilisez
tmux
,screen
ou quelque chose de similaire.la source
termin
sortie.$PPID
n'est pas standard dans tous les réservoirs. par exemple danstcsh
Je reçois:PPID: Undefined variable.
Vous pouvez essayer la commande suivante:Mise à jour (grâce à OP et Avinash Raj):
la source
gnome-terminal 3.6.2-0ubuntu1l
dans xterm?Une autre possibilité (pas parfaite) est:
Mais cela ne fonctionne pas avec lxterminal car la variable d'environnement est
$WINDOWID
vide ...Terminator affiche le nom "x-terminal-emulator".
la source
Le terminal actuel peut également être détecté via une séquence d'échappement: les attributs du périphérique (DA secondaire)
Par exemple en bash:
Cela ne renvoie qu'une sorte d'identifiant - et malheureusement je ne connais pas de liste officielle qui les traduise en noms réels.
Pour une implémentation réelle, qui traduit certains identifiants connus en noms de terminaux, consultez cet exemple de script bash: https://github.com/mintty/utils/blob/master/terminal
la source