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


41

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


Ответы:


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"

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.