Wie kann ich meine .bashrc nur dann aufrufen, wenn TMUX auf meinem System vorhanden ist?

7

Ich benutze tmux auf den meisten Boxen, aber nicht auf allen.

Ich habe die folgende Zeile in meiner .bashrc-Datei:

[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux

die tmux aufrufen, wenn es existiert.

Ich dachte das [ -z $TMUX ]bedeutete, dass es nur verwendet werden würde, wenn tmux existiert.

Allerdings auf einem anderen System, ohne tmux, bekomme ich

-bash: exec: tmux: nicht gefunden

und der Anmeldeversuch schlägt fehl

Auf meinem Hauptsystem sehe ich

$ echo $TMUX
/private/var/folders/ks/266xy5lj7x35gfj4csc66444b48rvq/T/tmux-373580663/default,55084,4

Ich habe es auch nur versucht [ $TMUX ](dh nein -z), aber das hat nicht geholfen

Ich suche auch nach einer robusten Lösung, die sowohl unter Ubuntu als auch unter OSX funktioniert

Michael Durrant
quelle

Antworten:

7

Hast du es echo $TMUXwährend einer tmuxSitzung getan ? Denn TMUXwird nur in einer Sitzung eingestellt.

Versuchen Sie das stattdessen:

[ -z "$TMUX" ] && command -v tmux >/dev/null && TERM=xterm-256color exec tmux
polym
quelle
2
Eine sauberere Lösung ist which tmux &>/dev/null && .... Die Ausgabe zu erfassen und zu testen, ob sie leer ist, ist nur schmutzig :-)
Patrick
@ Patrick Danke, ich habe es an Ihren Kommentar angepasst;)
Polym
5
@polym welches (1) ein externes Programm ist, mit dem PATH nach einer ausführbaren Datei durchsucht wird. Es verhält sich auf verschiedenen Systemen unterschiedlich und Sie können sich nicht auf einen nützlichen Exit-Code verlassen. Verwenden Sie stattdessen (von den meisten bis zu den am wenigsten portablen) den Befehl'v -v 'oder den Typ -P' (um den Pfad zu finden) oder den Hash (zum Überprüfen). Siehe mywiki.wooledge.org/BashFAQ/081
Valentin Bajrami
1
Noch ein Trottel: TERM=xterm-256color exec tmux:-)
Patrick
1
@VolkerSiegel Kommt darauf an, wie dies umgesetzt wird. Wenn dies einfach oben platziert wird .bashrc, dann sind Sie richtig, es ist ein Problem. Eine vollständige Lösung würde eine Kombination aus der Überprüfung beinhalten, ob sie $TMUXleer ist und ob die ausführbare Datei vorhanden ist.
Patrick
5

Ok, wenn Sie also tmuxnur starten möchten, wenn es in vorhanden ist $PATH und noch nicht ausgeführt wird, können Sie Folgendes tun:

command -v tmux >/dev/null && ${TMUX+:} TERM=xterm-256color exec tmux

Noch kürzer:

tmux -c "${TMUX+!} :" 2>/dev/null && exec tmux -2

Der zweite fordert tmuxdie Rückgabe von 0 auf, wenn ${TMUX}nicht gesetzt ist, &&wenn true, wird die Shell ausgeführt tmux -2, um 256-Farben zu erzwingen. Es wird immer nur true zurückgegeben, wenn es ausgeführt werden tmuxkann $PATHund wenn die Umgebungsvariable $TMUXnicht vorhanden ist.

mikeserv
quelle
1
Die "Variable ist nicht definiert oder wir kommentieren den gesamten Befehl mit :" ist interessant!
Volker Siegel
Vielen Dank für den Hinweis! Der Kommentar oben wurde geändert.
Volker Siegel
-1

Verwenden

which tmux && export TERM=xterm-256color && exec tmux

Wenn ja tmux, which tmuxwird der Pfad zur tmuxBinärdatei ausgewertet , daher zu true. Wenn dies nicht der Fall ist tmux, wird die leere Zeichenfolge ausgewertet false.


quelle
Nein, es funktioniert nicht, siehe unix.stackexchange.com/questions/146128/…
Polym