TMUX-Konfiguration abhängig vom Betriebssystem


41

Es gibt einige Zeilen meiner tmux.conf, die ich nur ausführen möchte, wenn mein Betriebssystem Mac ist. Ich möchte meine tmux.conf jedoch auf mehreren verschiedenen Betriebssystemen verwenden. Wie kann ich einen Befehl von dem Betriebssystem abhängig machen, auf dem tmux gerade ausgeführt wird?


Antworten:


51

Verwenden Sie den if-shellBefehl:

if-shell "uname | grep -q Darwin" "tmux-cmd1; tmux-cmd2;" "tmux-cmd3; tmux-cmd4"

Möglicherweise möchten Sie betriebssystemspezifische Befehle in separaten Dateien ablegen und über den Befehl "Quelldatei" ausführen.

if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"

8
Die Befehle if-shellund run-shell tmux sind derzeit asynchron (ab tmux 1.7). Sie führen ihren Shell-Befehl effektiv im Hintergrund aus, und alle tmux- Befehle, die sie ausführen, werden nur nach Befehlen ausgeführt, die nach dem if-shelloder run-shell-Befehl selbst kommen ( tmux ist single-threaded). Wenn Sie if-shelloder run-shellin verwenden ~/.tmux.conf(und alle Sitzungen, Fenster oder Fensterbereiche, die explizit durch erstellt wurden ~/tmux.conf), fehlen effektiv alle durch if-shelloder run-shellBefehle angeordneten tmux- Konfigurationen .
Chris Johnsen

1
@ ChrisJohnsen if-shellfunktioniert bei mir mit tmux 1.8 wie erwartet. Ich benutze es, um set-titles-string nur für SSH
festzulegen

2
Dies sollte akzeptiert werden; es ist der richtige Weg, es zu tun.
Chev

11

Jimeh https://github.com/jimeh/dotfiles/commit/3838db8 hat die Antwort. Auch Chris Johnsen ist es zu verdanken, dass er den Leuten in der GitHub-Frage hier geholfen hat: https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

Grundsätzlich richten Sie ein Shell-Skript mit dem Namen ein safe-reattach-to-user-namespace, das prüft, ob der Befehl real reattach ... vorhanden ist.

#! /usr/bin/env bash

# If reattach-to-user-namespace is not available, just run the command.
if [ -n "$(command -v reattach-to-user-namespace)" ]; then
  reattach-to-user-namespace $@
else
  exec "$@"
fi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.