4 Stimmen

Wie kann ich auf einem Mac innerhalb der Shell erkennen, dass ich eine GUI habe?

Weil ihr (lieben) Menschen immer so neugierig auf die ursprünglichen Absichten der Poster seid, hier ist meine:

Wenn ich an einem Mac arbeite und eine grafische Benutzeroberfläche habe (im Gegensatz zu einer ssh-Sitzung), möchte ich meine $EDITOR zu mate_wait . (Und gehen Sie mit vim sonst.)

Und Sie haben eine Antwort darauf. Die habe ich auch. Es funktioniert sogar. Hier. Manchmal.

Deshalb möchte ich, dass Sie sie genau unter die Lupe nehmen:

Intro überspringen

Ich kann erkennen, dass ich einen Mac verwende, indem ich nachsehe:

[ `uname` = 'Darwin' ]

Und ich denke, ich kann irgendwie feststellen, dass ich eine GUI habe, indem ich sie überprüfe:

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

Nun ist es theoretisch möglich, dass ich ein Aqua-loses OpenDarwin-Setup mit X11 habe. Es ist auch möglich, dass ich eine voll funktionsfähige Mac-GUI verwende, aber ein anderes Terminalprogramm.

Und dann gibt es noch die verblüffende Möglichkeit, dass ich xterm innerhalb von Apples X11 ausführe, das über der grafischen Benutzeroberfläche von OS X läuft. In diesem Fall würde ich immer noch wollen mate_wait als $EDITOR .

Aus Gründen der Zwangsstörung möchte ich, dass meine Kontrollen so genau wie möglich sind.

Also bitte, entschlüsseln Sie meinen Code.

2voto

Petesh Punkte 86615

Ich werde einen Versuch wagen, der aber wahrscheinlich unvollständig ist.
Bedingung 1: Bin ich ortsansässig?

[ -z "$SSH_CLIENT" ]

Bedingung 2: Bin ich ferngesteuert?

[ -n "$SSH_CLIENT" ]

Bedingung 3: Habe ich die leckbare mac GUI

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

Also setzen wir diese zusammen:

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

Sie benötigen ein Skript mit dem Namen "matew", das dies einfach tut:

#!/bin/sh
exec mate -w "$*"

da EDITOR nur als direkter Befehl erwartet wird, und nicht funktioniert, wenn es 'mate -w' ist (zumindest auf Snow Leopard).

2voto

Glyph Punkte 30137

Sie können fragen launchctl was die aktuelle Sitzung verwaltet.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X