我的命令中有几行tmux.conf
我希望仅在我的操作系统是 Mac 时执行。但是,我想tmux.conf
在多个不同的操作系统上使用我的命令。如何使命令以 tmux 当前运行的操作系统为条件?
答案1
使用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"
答案2
吉梅https://github.com/jimeh/dotfiles/commit/3838db8有答案。此外,Chris Johnsen 也因帮助人们解决 GitHub 问题而功不可没:https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987
基本上,您设置了一个名为的 shell 脚本safe-reattach-to-user-namespace
,用于检查是否存在真正的重新连接...命令。
#! /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
答案3
if-shell 检查必须是字符串,并且要运行的命令必须括在 中{}
。下面是如何绑定]
键以粘贴系统剪贴板的示例,命令因操作系统而异。
if-shell 'uname | grep -q Linux' { bind-key ] run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer" }
if-shell 'uname | grep -q Darwin' { bind ] run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer" }