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.
In .bashrc Terminal-Anwendung unterscheiden
In .bashrc Terminal-Anwendung unterscheiden
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: In .bashrc Terminal-Anwendung unterscheiden
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.
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!
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: In .bashrc Terminal-Anwendung unterscheiden
Da lässt sich bestimmt was scripten.
Wenn ich z.B. in der bash aufrufe, erhalte ich die PID dieser bash.
Ein
sagt mir dann z.B.:
Damit kann ich schon mal sehen, dass die bash von Prozess Nr 6699 aufgerufen wurde.
Anschließend noch mal
und der Verursacher ist verhaftet:
Wenn ich z.B. in der bash
Code: Alles auswählen
$ PID=`echo $$`
$ echo $PID
Ein
Code: Alles auswählen
ps -ef|grep -v grep|grep $PID|grep bash
Code: Alles auswählen
lstone 6701 6699 0 19:03 pts/0 00:00:00 bash
Anschließend noch mal
Code: Alles auswählen
ps -ef|grep -v grep|grep 6699|grep -v bash
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
Douglas Adams
Re: In .bashrc Terminal-Anwendung unterscheiden
Das könnte man noch etwas kürzer mit PPID – in einzelnen Fällen in Kombination mit $$ – und Nachgucken in /proc lösen:
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).
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
Zuletzt geändert von JTH am 30.11.2021 19:58:58, insgesamt 2-mal geändert.
Grund: Nachtrag
Grund: Nachtrag
Manchmal bekannt als Just (another) Terminal Hacker.
Re: In .bashrc Terminal-Anwendung unterscheiden
"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:
Edit:
Wobei das mit JTHs $PPID natürlich schöner ist, sofern man die ps-Informationen nicht benötigt.
Code: Alles auswählen
ps -fp`ps -hp$$ -oppid`
Wobei das mit JTHs $PPID natürlich schöner ist, sofern man die ps-Informationen nicht benötigt.