在Mac上,在shell中,我怎么能告诉我有一个GUI?

时间:2009-09-08 09:32:00

标签: macos unix shell environment-variables

因为你(可爱)的人总是对海报的原始意图如此好奇,这是我的:

  

如果我在Mac上并拥有GUI(而不是,例如,在ssh会话中),我想将$EDITOR设置为mate_wait。 (另请使用vim。)

而且,你有答案。我也做。它甚至有效。这里。有时。

所以我希望你对它进行严格的审查:

跳过介绍

我可以通过检查确认我在Mac上:

[ `uname` = 'Darwin' ]

我想我可以通过检查来判断我有一个GUI:

[ "$TERM_PROGRAM" = 'Apple_Terminal' ]
  # or
[ "$DISPLAY" ]

现在,理论上我可以使用运行X11的Aqua-less OpenDarwin设置。我也可能正在运行完全可舔的Mac GUI,但还在使用另一个终端应用程序。

然后有一种令人费解的可能性,即我在运行在OS X GUI之上的Apple X11中运行xterm。在这种情况下,我仍然希望mate_wait$EDITOR

为了OCD,我希望我的检查尽可能准确。

所以,请不要鲁莽地使用我的代码。

2 个答案:

答案 0 :(得分:2)

我会抓住这个,请注意,这可能是不完整的 条件1:我是当地的

[ -z "$SSH_CLIENT" ]

条件2:我是远程

[ -n "$SSH_CLIENT" ]

条件3:我是否拥有lickable mac GUI

[ -n "`ps -fe | grep '[W]indowServer'`" ]

将这些放在一起:

if [ -z "$SSH_CLIENT" -a -n "`ps -fe | grep '[W]indowServer'`" ]; then
     EDITOR="matew"
else
     EDITOR=vim
fi

你需要一个名为'matew'的脚本,它只是:

#!/bin/sh
exec mate -w "$*"
由于EDITOR只是一个直接命令,如果它是'mate -w'(至少在雪豹身上),它将不起作用。

答案 1 :(得分:0)

您可以询问launchctl管理当前会话的内容。

if [ "$(launchctl managername)" == Aqua ]; then
    EDITOR="matew";
else
    EDITOR="vim";
fi;