当我尝试从 tmux 启动 Sublime Text 或 SourceTree 时出现此错误:
$ subl
Unable to launch Sublime Text 2
$ stree
Unable to open SourceTree
看来我也无法打开 os x 应用程序:
$ open MPlayerX.app
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/MPlayerX.app.
我使用的是 Yosemite OS X 10.10 (14A388a)、带 zsh 的 iTerm 2、tmux 1.0a。使用 bash 时也遇到了同样的问题。知道发生了什么吗?
答案1
更新:使用 tmux >= 时,此过程是不必要的v2.6
我发现了一个作者:Brendon Rapp描述不需要大量别名的解决方案。
$ brew install reattach-to-user-namespace
将以下行添加到 ~/.tmux.conf 的末尾:
if-shell 'test "$(uname)" = "Darwin"' 'source ~/.tmux-osx.conf'
创建一个名为 ~/.tmux-osx.conf 的文件,内容如下:
set-option -g default-command "reattach-to-user-namespace -l bash"
上述解决方案允许同一个 .tmux.conf 文件在 Linux 和 OS X 下正常工作。如果您只使用 OS X,则只需将“default-command”选项直接添加到您的 ~/.tmux.conf 中。
如果您使用 bash 以外的 shell,请在“-l”开关后将“bash”替换为您的 shell。
答案2
我在使用 tmux 时遇到了同样的问题,并使用重新附加到用户命名空间和 shell 别名。
$ brew install reattach-to-user-namespace
$ vi ~/.bash_aliases
alias subl='reattach-to-user-namespace subl' alias stree='reattach-to-user-namespace stree' alias open='reattach-to-user-namespace open'
$ source ~/.bash_aliases
虽然不优雅,但是可以。
答案3
我发现,如果我尚未处于会话中,则将其添加到我的别名中对我来说不起作用(即,如果我只是处于一个裸的、无 iTerm 的会话tmux
中,它会引发错误)。tmux
如果您只想在 tmux 会话中设置此别名,请尝试以下操作:
if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
alias stree="reattach-to-user-namespace stree"
fi
您可能需要echo $TERM
在 tmux 会话中查看您的$TERM
环境变量设置为何值。我的环境变量实际上是screen-256color
,因此我适当地替换了上面的值。
祝你好运!