In .bashrc Terminal-Anwendung unterscheiden

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
buhtz
Beiträge: 1105
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

In .bashrc Terminal-Anwendung unterscheiden

Beitrag von buhtz » 29.11.2021 07:41:30

In der .bashrc setze ich bereits in Abhängigkeit des hostnames diverse unterschiedliche Farben usw.

Kann ich an dieser Stelle auch unterscheiden, in welcher Terminal-Anwendung die aktuelle bash-Instanz läuft?
Ich möchte tmux, ssh, terminator (default terminal) und tty unterscheiden.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: In .bashrc Terminal-Anwendung unterscheiden

Beitrag von Meillo » 29.11.2021 08:29:03

Deine aufgezaehlten Terminal-Umgebungen sind nicht disjunkt, d.h. du kannst z.B. in einem Terminator eine ssh-Verbindung aufmachen und darin tmux starten (wobei das tmux dann auf der entfernten Maschine laeuft). Das nur der Vollstaendigkeit halber erwaehnt. Es kann also nicht gleich funktionieren wie bei den Hostnames, die disjunkt sind.


Schau dir in den verschiedenen Umgebungen mal die Umgebungsvariablen an (Befehl `env'). Ssh und tmux setzen welche, auf deren Existenz zu preufen kannst.

Terminals setzen die Variable TERM, allerdings wird die oft nur nur auf einen Kompatibilitaetswert (wie `xterm') gesetzt. Da musst du schauen was Terminator macht.
Use ed once in a while!

Benutzeravatar
Livingston
Beiträge: 1434
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: In .bashrc Terminal-Anwendung unterscheiden

Beitrag von Livingston » 30.11.2021 19:17:00

Da lässt sich bestimmt was scripten.
Wenn ich z.B. in der bash

Code: Alles auswählen

$ PID=`echo $$`
$ echo $PID
aufrufe, erhalte ich die PID dieser bash.

Ein

Code: Alles auswählen

ps -ef|grep -v grep|grep $PID|grep bash
sagt mir dann z.B.:

Code: Alles auswählen

lstone      6701    6699  0 19:03 pts/0    00:00:00 bash
Damit kann ich schon mal sehen, dass die bash von Prozess Nr 6699 aufgerufen wurde.
Anschließend noch mal

Code: Alles auswählen

ps -ef|grep -v grep|grep 6699|grep -v bash
und der Verursacher ist verhaftet:

Code: Alles auswählen

lstone      6699    6698  0 19:03 ?        00:00:00 xterm
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: In .bashrc Terminal-Anwendung unterscheiden

Beitrag von JTH » 30.11.2021 19:37:19

Das könnte man noch etwas kürzer mit PPID – in einzelnen Fällen in Kombination mit $$ – und Nachgucken in /proc lösen:

Code: Alles auswählen

$ cat /proc/$$/comm
bash
$ cat /proc/$PPID/comm
gnome-terminal-
$ ssh somehost 'cat /proc/$PPID/comm'
sshd
$ screen
$ cat /proc/$PPID/comm  # In einer Screen-Session
screen
Wobei ich nicht sicher bin, ob PPID in allen Shells verfügbar ist. Nachtrag: Ist zumindest von Posix vorgegeben (Shell Command Language: 2.5.3 Shell Variables).
Zuletzt geändert von JTH am 30.11.2021 19:58:58, insgesamt 2-mal geändert.
Grund: Nachtrag
Manchmal bekannt als Just (another) Terminal Hacker.

tobo
Beiträge: 1991
Registriert: 10.12.2008 10:51:41

Re: In .bashrc Terminal-Anwendung unterscheiden

Beitrag von tobo » 30.11.2021 19:37:49

"grep -v grep| ... |grep bash" könnte man einfach durch "... | grep bas[h]" ersetzen. Aber das geht wohl auch insgesamt noch einen Tick kürzer:

Code: Alles auswählen

ps -fp`ps -hp$$ -oppid`
Edit:
Wobei das mit JTHs $PPID natürlich schöner ist, sofern man die ps-Informationen nicht benötigt.

Antworten