Macos 在Mac上,在shell中,我如何判断我有一个GUI?

Macos 在Mac上,在shell中,我如何判断我有一个GUI?,macos,unix,shell,environment-variables,Macos,Unix,Shell,Environment Variables,因为你们(可爱的)人总是对海报的原意很好奇,所以我的想法是: 如果我在Mac上并且有一个GUI(与ssh会话相反),我想将我的$EDITOR设置为mate\u wait。(否则,请使用vim) 你有一个答案。我也是。它甚至可以工作。在这里有时候 所以我想让你仔细检查一下: 跳过介绍 我可以通过检查以下各项来判断我正在使用Mac电脑: [ `uname` = 'Darwin' ] [ "$TERM_PROGRAM" = 'Apple_Terminal' ] # or [ "$DISPLAY"

因为你们(可爱的)人总是对海报的原意很好奇,所以我的想法是:

如果我在Mac上并且有一个GUI(与ssh会话相反),我想将我的
$EDITOR
设置为
mate\u wait
。(否则,请使用
vim

你有一个答案。我也是。它甚至可以工作。在这里有时候

所以我想让你仔细检查一下:

跳过介绍 我可以通过检查以下各项来判断我正在使用Mac电脑:

[ `uname` = 'Darwin' ]
[ "$TERM_PROGRAM" = 'Apple_Terminal' ]
  # or
[ "$DISPLAY" ]
我想我可以通过检查来判断我有一个GUI:

[ `uname` = 'Darwin' ]
[ "$TERM_PROGRAM" = 'Apple_Terminal' ]
  # or
[ "$DISPLAY" ]
现在,从理论上讲,我可能有一个运行X11的无水OpenDarwin设置。也有可能我运行的是完全可舔的MacGUI,但使用的是另一个终端应用程序

还有一种令人难以置信的可能性,就是我在苹果的X11中运行xterm,运行在OSXGUI上。在这种情况下,我仍然希望
mate\u wait
作为
$EDITOR

为了强迫症,我希望我的检查尽可能精确


所以,请不要轻率地使用我的代码。

我会尝试一下,请注意,它可能不完整。
条件1:我是本地人吗

[ -z "$SSH_CLIENT" ]
条件2:我是远程的吗

[ -n "$SSH_CLIENT" ]
条件3:我有可舔的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 "$*"

因为编辑器只能是一个直接命令,如果它是“mate-w”(至少在雪豹上是这样)则无法工作。

您可以询问
launchctl
是什么在管理当前会话

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

mate-w实际上可以工作(或者我记得是这样),但是您可以将mate作为mate_wait进行符号链接,当这样调用时,它将假定-wcan您可以假定您是本地的,只是因为您没有使用SSH-ed吗?(我猜是telnet之类的)至于Windows服务器的grepping,嗯,我正试图找出一个问题,但我猜如果你知道你是本地人,那么你就很好。这是真的,但是你是本地人,运行Windows服务器而你没有登录的几率有多大?除非您使用的是串行连接,否则我看不出这会如何影响交互式登录显示
if[-z“$SSH_CLIENT”]&&ps-axc-ouid,command | grep-sq“$UID loginwindow\$”;然后
。。。这将测试是否有一个loginwindow实例具有与您相同的有效UID,只有当您的用户有GUI登录会话时才会出现这种情况,这不包括您向另一个用户请求的情况。