Gibt es eine Möglichkeit, die Art des Terminals mit einem Befehl abzurufen?
Wenn ich verwende gnome-terminal
, sollte die Ausgabe so gnome-terminal
oder so ähnlich sein. Es wäre auch schön, die Version des Terminals zu bekommen.
Aktualisieren
ps -aux | grep `ps -p $$ -o ppid=`
wird so etwas ausgeben:
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
Dies funktioniert auch mit xterm, aber wie bekomme ich nur den Namen ( xfce4-terminal
in diesem Fall)?
command-line
TuKsn
quelle
quelle
window 31457282 has no pid associated with it
(getestet auf Lubuntu)Antworten:
Originalfassung
Eine Möglichkeit, dies zu tun, besteht darin, den übergeordneten Prozess Ihrer aktuellen Shell-Sitzung und von dort den Namen des Terminals abzurufen.
Ruft das übergeordnete Element des aktuellen Shell-Prozesses ab. Die Bash-Variable
$$
ist die PID Ihrer aktuellen Shell, daher können wir diese als Abfrage anps
(-p $$
) senden und sie bitten, die PID des übergeordneten Prozesses zu drucken (-o ppid=
das Nachstellen=
dient dazu, das Drucken von Spaltenüberschriften zu vermeiden):Die PID des übergeordneten Elements meiner Shell lautet also
544
.Rufen Sie den mit dieser PID verknüpften Prozess ab und drucken Sie seine Befehlszeile
Die obige Ausgabe hängt davon ab, welchen Terminalemulator Sie verwenden
terminator
.Kombinieren Sie alles in einem einzigen Befehl
Verwenden Sie das, um die Version zu erhalten
Fügen Sie Ihrer eine kleine Funktion hinzu, die
~/.bashrc
den Namen und die Version des von Ihnen verwendeten Terminalemulators zurückgibt (dies funktioniert für die meisten gängigen Terminalemulatoren):Sie können nun den Namen des Terminals abrufen und ihm eine beliebige Option übergeben (z
--version
. B..Einige Beispiele mit verschiedenen Terminals:
xterm
terminator
rxvt
, dieses hat keine der-V
,-version
oder--version
Flags, so dass keine Versionsinformationen gedruckt werden.gnome-terminal
.konsole
lxterminal
xfce4-terminal
Neu und verbessert
Der obige Ansatz ist jedoch nicht so vertrauenswürdig. Es wird ersticken, wenn Sie Ihre Shell ausführen, nachdem
su
Sie sie einem anderen Benutzer übergeben haben, oder wenn Ihr Terminal auf etwas und verschiedene andere Fälle ausgerichtet ist. Da wir hier offensichtlich mit X-Programmen arbeiten, besteht eine bessere Möglichkeit darin, stattdessen etwas wiexdotool
(installierbar mitsudo apt-get install xdotool
) zu verwenden, um die Informationen abzurufen:Oben wird die Befehlszeile gedruckt, die zum Starten des aktuell aktiven Fensters verwendet wird. Da Ihr Terminal vermutlich aktiv sein wird, wird dieser Befehl angezeigt. Dies bedeutet, dass Sie bei den meisten Terminalemulatoren davon ausgehen können, dass das erste zurückgegebene Feld der Terminalname ist:
Dies bedeutet, dass das Abrufen der Version trivial ist. Beispielsweise
Nicht so für
gnome-terminal
:oder
terminator
:Also können wir es etwas komplexer machen (es gibt hier einige Bashismen, diese sind nicht portabel):
Dies funktioniert in allen Fällen, in denen ich getestet habe.
quelle
$PPID
, um die PID des übergeordneten Prozesses abzurufen.ksh
oder nicht verfügbartcsh
. Es ist eine sehr gute Idee für die Bash-Familie, da es viel einfacher ist als mein Ansatz.ksh93
undmksh
.Versuche dies,
ODER
quelle
rxvt
undterminator
und der zweite Fehler tritt aufuxterm
undgnome-terminal
(es wird gedruckt/usr/lib/gnome-terminal/gnome-terminal-server
). Sie werden alle scheitern (wie auch meine), wenn Sie eine su-Sitzung verwenden.$PPID
ist die PID des übergeordneten Prozesses der Shell.comm
bedeutet Befehl . Es kann sich um einen vollständigen Pfad handeln oder auch nicht.basename
Daher wird der Pfad bei Bedarf entfernt.Vorbehalte
Dies gilt wahrscheinlich auch für einige der anderen Antworten.
comm
ist technischargv[0]
, was eigentlich eine beliebige Zeichenfolge sein kann. Aber im Allgemeinen sollten Sie sich in diesem speziellen Fall darauf verlassen können.Das wird nicht funktionieren wie erwartet , wenn Sie über SSH oder Verwendung verbinden
tmux
,screen
oder etwas ähnliches.quelle
termin
als Ausgang.$PPID
nicht bei allen Shells Standard ist. zB intcsh
ich bekomme:PPID: Undefined variable.
Sie können den folgenden Befehl versuchen:Update (dank OP und Avinash Raj):
quelle
gnome-terminal 3.6.2-0ubuntu1l
in xterm?Eine andere (nicht perfekte) Möglichkeit ist:
Dies funktioniert aber mit lxterminal nicht, da die Umgebungsvariable
$WINDOWID
leer ist ...Der Terminator zeigt den Namen "x-terminal-emulator".
quelle
Das aktuelle Terminal kann auch über eine Escape-Sequenz erkannt werden: Die Geräteeigenschaften (Secondary DA)
Zum Beispiel in der Bash:
Dies gibt nur eine Art von ID zurück - und leider kenne ich keine offizielle Liste, die diese in die tatsächlichen Namen übersetzt.
Eine echte Implementierung, die einige bekannte IDs in Terminalnamen übersetzt, finden Sie in diesem Beispiel-Bash-Skript: https://github.com/mintty/utils/blob/master/terminal
quelle