Конфигурация tmux условна для ОС

41

В моем tmux.conf есть несколько строк, которые я хотел бы выполнить, только если моей ОС является Mac. Тем не менее, я хотел бы использовать мой tmux.conf на нескольких разных ОС. Как я могу сделать команду условной для ОС, в которой в настоящее время работает tmux?

muckabout
источник
1
Обнаружение

Ответы:

51

Используйте if-shellкоманду:

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

Возможно, вы захотите поместить специфичные для ОС команды в отдельные файлы и выполнить их с помощью команды «исходный файл».

if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"
chepner
источник
8
В if-shellи run-shell tmux команды в настоящее время асинхронные (по состоянию на tmux 1.7); они эффективно запускают свои команды оболочки в фоновом режиме, и любые команды tmux, которые они запускают, будут выполняться только после любых команд, которые идут после самой команды if-shellили run-shell( tmux однопоточный). Фактически, если вы используете if-shellили run-shellв ~/.tmux.confначальном сеансе (и в любых сеансах, окнах или панелях, созданных явно через ~/tmux.conf), будет отсутствовать любая конфигурация tmux, упорядоченная с помощью команд if-shellили run-shell.
Крис Джонсен
1
@ChrisJohnsen if-shellработает как я ожидал с tmux 1.8. Я использую его для установки набора заголовков только для SSH: github.com/blueyed/dotfiles/commit/…
blueyed
2
Это должно быть принято; это правильный способ сделать это.
Chev
11

Jimeh https://github.com/jimeh/dotfiles/commit/3838db8 имеет ответ. Также Крис Джонсен заслуживает большой похвалы за помощь людям по проблеме GitHub здесь: https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

По сути, вы устанавливаете скрипт оболочки, safe-reattach-to-user-namespaceкоторый проверяет существование настоящей команды 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
Иван
источник