Konfiguracja tmux zależy od systemu operacyjnego

41

W moim tmux.conf jest kilka wierszy, które chciałbym wykonać tylko wtedy, gdy mój system operacyjny to Mac. Chciałbym jednak użyć mojego pliku tmux.conf na wielu różnych systemach operacyjnych. Jak mogę uzależnić polecenie od systemu operacyjnego, na którym tmux jest obecnie uruchomiony?

muckabout
źródło
1
wykrywanie wersji stackoverflow.com/questions/35016458/…
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

Odpowiedzi:

51

Użyj if-shellpolecenia:

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

Możesz umieścić polecenia specyficzne dla systemu operacyjnego w osobnych plikach i wykonać je za pomocą polecenia „plik źródłowy”.

if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"
chepner
źródło
8
Te if-shelli run-shell tmux polecenia są obecnie asynchronicznym (od tmux 1.7); efektywnie uruchamiają polecenie powłoki w tle, a wszelkie polecenia tmux , które wykonują, będą wykonywane tylko po poleceniach, które następują po samym poleceniu if-shelllub run-shell( tmux jest jednowątkowy). Skutecznie, jeśli używasz if-shelllub run-shellw ~/.tmux.confpoczątkowa sesji (i sesjach, okna lub szyby stworzone wprost stworzony przez ~/tmux.conf) zabraknie któregokolwiek tmux konfiguracja przeprowadzona przez if-shelllub run-shellpolecenia.
Chris Johnsen
1
@ChrisJohnsen if-shelldziała zgodnie z oczekiwaniami dla mnie z tmux 1.8. Używam go do ustawiania ciągu set-titles-string tylko dla SSH: github.com/blueyed/dotfiles/commit/…
blueyed
2
Należy to zaakceptować; to właściwy sposób, aby to zrobić.
Chev
11

Jimeh https://github.com/jimeh/dotfiles/commit/3838db8 ma odpowiedź. Również Chris Johnsen zasługuje na wiele uznania za pomoc ludziom w kwestii GitHub tutaj: https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

Zasadniczo skonfigurowałeś skrypt powłoki o nazwie safe-reattach-to-user-namespacesprawdzający istnienie polecenia reattach ...

#! /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
Ivan
źródło