Aus Terminal EINFACH GUI Apps starten

alexs77

alexs77

Mitglied
Thread Starter
Dabei seit
25.11.2009
Beiträge
30
Reaktionspunkte
2
Hallo.

Der Thread https://www.macuser.de/threads/terminal-programme-ueberall-aufrufen.551737/ brachte mich auf folgende Frage:

Wie kann ich es *EINFACH* erreichen, das ich aus dem Terminal heraus "GUI Apps" starten kann? Z.B. Safari, Firefox und eben *ALLE* Programme, die in /Applications abgelegt sind?

Einerseits könnte ich natürlich immer "open -a /Applications/Firefox.app" verwenden, wenn ich z.B. Firefox aufrufen möchte. Oder aber, ich könnte /Applications/Safari.app/Contents/MacOS, /Applications/Firefox.app/Contents/MacOS, … in den $PATH aufnehmen. Wenn man das aber für *ALLE* Apps haben möchte, so würde der $PATH dann etwas, nunja, "länglich" werden. Unschön.

Gibt's denn noch andere Möglichkeiten (also ausser open -a bzw. einen gigantomanischen $PATH)?

Danke schonmal ;)

"PS": Auf die Frage kam ich auch deshalb, weil ich's von Linux aus gewohnt bin, einfach z.B. "firefox" eingeben zu können um firefox zu starten, da firefox in /usr/bin liegt und /usr/bin natürlich im $PATH ist.
 
würde Dir auch das starten über Spotlight genügen? Ich drücke immer Apfel+Leer und dann zB. Fir (Enter) oder Ape (Enter) um Firefox, Aperture oder was auch immer zu starten. Den Finder benutze ich nie um Programme zu starten.
 
Nein, Spotlight genügt mir *DABEI*, bei *DIESER* Frage, nicht.

Wobei ich sagen muss, das auch ich normalerweise Spotlight verwende. Aber ab und an möchte man (dh.: "ICH" *G*) schon mal 'ne App aus dem Terminal starten. Und dann auf "open" zurückgreifen zu müssen oder aber $PATH zu verunstalten... Nun, ja, geht. Klar. Ist aber genauso klar nicht gerade schön (zumindest IMO).
 
ein einfaches
open -a Firefox
reicht.
/Applications/Name.app brauchst du nicht da...
 
Umso schlimmer, das open -a Firefox reicht - denn das kann man schwer mit Tab Completion "eingeben". Bin halt faul *G*

Wobei - mit bash completion sollte da doch was machbar sein...
 
also ich weiß ja nicht ;)
wozu hast du das dock, da reicht einmal kurz klicken.
das geht schneller als das ganze tippen...
du kannst natürlich auch ein "open -a" alias definieren mit einem buchstaben.
 
Nein, klicken geht nicht schneller - besonders dann nicht, wenn man eh gerade im Terminal ist und am tippen ist. Und auch mit einem alias O='open -a' hat man das "Problem", das man keine <tab> Erweiterung hat. Schlecht. Da ist Linux/Unix/Solaris einfach besser zu benutzen, da Programme (üblicherweise) in einer überschaubaren Anzahl von Verzeichnissen installiert werden - hauptsächlich eben /usr/bin, /bin oder /usr/local/bin. So bleibt der $PATH überschaubar (z.B. bei meinem ArchLinux hier: /home/user/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/lib/perl5/vendor_perl/bin:/usr/bin/perlbin/vendor:/usr/lib/perl5/core_perl/bin:/opt/qt/bin) und man kann alles schnell und einfach und bequem ausführen.

Wie erreicht man ähnliches auf OSX? Spotlight: Nein, denn dann ist man nicht mehr im Terminal. "open -a": Nein, denn dann hat man keine <tab> Vervollständigung (und wie ruft man mit "open -a" eigtl. Programme auf, die in /Applications/Name.app/ liegen, die aber nicht das "eigentliche" Programm sind?). $PATH "explodieren lassen": Nuja. Ein $PATH von 23482 Zeichen Länge empfinde ich als unschön.

BTW: Firefox ist eigtl. ein schönes Bsp.: Dessen Profile Manager ruft man ja auf, indem man den Kommandozeilenparameter "-profilemanager" übergibt. Wie geht das bei "open -a"? Hm, ja, durch "--args ...". Hm.
 
also mir fehlt da gerade so der sinn, apps zwanghaft übers terminal zu starten, wenn man die eh mit der maus bedienen muss...
das mit dem PATH geht z.b. nicht, weil ein .app package nun mal anders aufgebaut ist und nicht für PATH ausgelegt wurde...
jetzt mal davon abgesehen, dass .app eigentlich überhaupt nicht dazu gedacht sind vom terminal gestartet zu werden. du musst immer ein & hinter hängen und wenn du das terminal zumachst, wird die app auch beendet.

warum bleibst du denn nicht gleich bei linux, wenn deine gewohnheiten dir im weg stehen neue wege zu gehen?

aber wenn du unbedingt brute force nutzen willst, um das runde in das eckige zu kriegen, dann mach dir doch ein script, dass dir wunderschön alle .app durchforstet und ein entsprechendes start script in /usr/local/bin ablegt mit dem app namen.
 
Zuletzt bearbeitet:
Warum sollte es mit $PATH denn nicht gehen? Angenommen, /Applications/Firefox.app//Contents/MacOS ist im $PATH, dann könnte man firefox-bin eingeben und Firefox würde gestartet. Da gäbe es dann exakt null Unterschied dazu, das man /Applications/Firefox.app//Contents/MacOS/firefox-bin aufrufen würde. Oder übersehe ich da was?

Mir fehlt übrigens gerade der Sinn dafür, warum man Apps nicht eh via Terminal starten sollte, wenn man sowieso schon da ist. Warum denn nicht? Das mit dem "&" ist kein Argument - ist auf "richtigen" Unixen und auf Linux nicht anders. Das war ja schon immer so auf *nix.

Das mit dem Script ist hingegen eine Idee:

ln -s /Applications/*/Contents/MacOS/* /opt/chaos

Und dann /opt/chaos in den $PATH. Allerdings ist anzunehmen, das eher diese Variante NICHT funktioniert. Grund: Wenn 'ne App nun ihre Resourcen (Bilder etc.pp.) in "../Resources" sucht, so wird sie nichts finden. Mal testen, aber bei dieser Variante bin ich eher skeptisch.
 
du kannst keine wildcard symlinken ;)
da wäre es wohl eher besser
find /Applications -name MacOS -exec find {} -type f -d 1 -perm 755 \;
zu machen und dann
ln -s {} `basename {}` \;
das verschachteln der find überlass ich dir ;)

aber trotzdem übersiehst du da was, die cocoa apps haben meist keine parameter für die command line usw.
und wenn du das controlling terminal schliesst, schliesst auch die app. dann fehlt dir z.b. der schliessen-speicher-dialog usw...
 
Zuletzt bearbeitet:
Servus,
ich hatte da irgendwann zu 10.4 Zeiten auchmal nach gesucht und bin über folgendes Script gestolpert, welches eine Datei erstellt in der aliase mit dem .app namen zu den jeweiligen Programmen angelegt werden.
Code:
# The Script:
# Update the .osxaliases file if it's out-of-date
if [ -M $OSXAPPSDIR -gt -M ~/.osxaliases ]; then
        echo "Updating OS X aliases..."
        find $OSXAPPSDIR -name '*.app' -prune -or -name '*.dock' -prune 2>/dev/null | awk '{ count = split($0,path,/\/|\.app|\.dock/);name = path[count-1];name = tolower(name);gsub(/|\(|\)/, "", name);print "alias", name, "='\''open -a \"" $0 "\" &'\''";}' | sed -e 's/ =/=/g;' > ~/.osxaliases
endif
source ~/.osxaliases

Wenn Du dann den Aufruf des Scripts in dein profile der Shell legst wird automatisch beim shell starten dein aliasfile aktualisiert.
Empfinde ich als eleganter als das /chaos Verzeichnis ;)
 
Na, selbstverständlich kann man Wildcards verwenden, um zu linken, denn ln akzeptiert mehrere "Eingabedateien", wenn der letzte Parameter ein Verzeichnis ist. Genau wie cp auch. Probier's doch mal aus:

mkdir /tmp/EtCeTera
ln -s /etc/* /tmp/EtCeTera

Ergebnis: In /tmp/EtCeTera sind jetzt zigst sym links, die auf alle Dateien/Verzeichnisse von /etc zeigen.

Da ist ein "rumgehampel" ;) mit find absolut unsinnig.

Das mit dem Schliessen des Terms sehe ich nach wie vor nicht als Problem an. Ist unter anderen Unixen doch genauso.

Und wieso ist's ein Problem/Argument, das Cocoa Apps keine Command Line Parameter akzeptieren? Verstehe ich nicht.
 
bequiet,

wie gesagt, ich glaube ja sowieso nicht, das die Idee mit dem /opt/chaos Verzeichnis funktioniert hätte. Bei manchen Apps vielleicht, aber sicher nicht bei allen.

Deine Idee mit den Aliasen finde ich hingegen gut. Muss man aber aufpassen, das man sich da nicht ausversehen die richtigen Apps "überschreibt".

Bsp.: Bei Dropbox gibt's im MacOS Verzeichnis auch ein python Executable. Würde man nun "stumpfsinnig" alles aus /Applications/*.app/*/MacOS in Aliasse umwandeln, würde man Gefahr laufen, das der Alias "python" das "/usr/bin/python" bzw. "/opt/local/bin/python" "überlagert".

Aber so für den Anfang ist Dein Script schon mal 'ne Gute Idee(TM)!

Danke dafür!
 
Ist nicht mein Script, nur kenne ich leider die Quelle nicht mehr. Dann macht man vor den aliasnamen einfach einen eindeutigen zusatz, z.B. "a_", und schon überschreibt man keine richtigen Apps.
 
naja, das rumgehampel mit find liefert dir nur die executables.
meist liegt ja auch noch anderer müll mit in Contents/MacOS mit rum (der teilweise aber auch 755 ist).
die parameter wären z.b. ein grund die app notwendigerweise im terminal zu starten ;)
aber wer keine arbeit hat, der macht sich halt welche...
 
oneOeight,

das eine App keine Parameter braucht, ist aber hingegen KEIN Grund, sie NICHT aus dem Terminal zu starten. Der Hinweis auf Dein perm 755 ist ein Guter - Danke! - aber, wie gesagt, bin doch SEHR skeptisch, ob's überhaupt funktionieren würde. Wie gesagt, gut vorstellbar, das 'ne App ihre Bildchen & Co. relativ zum Verzeichnis sucht, wo die ausführbare Datei liegt. Da die nun in /opt/chaos "löge", würden die Bilder nicht gefunden werden.

Werde es wohl so machen, wie bequiet vorgeschlagen hat. Dazu packe ich mir "sein" Script in einen minütlichen Cron Job und freue mich ;)

Auf http://osx.pastebin.com/wJmw3mPh gibt's das Script in "schön".
 
Wie passend, ich möchte im Terminal ebenfalls ein Programm öffnen, aber nicht in der GUI. Ich benutze das CAS-Programm Maple, welches auch eine Kommandozeilen-Version beinhaltet. Was muss ich wo ändern/eingeben, damit ich es einfach mit der Eingabe von maple14 im Terminal öffnen kann?

Der Pfad dazu ist dieser: "/Library/Frameworks/Maple.framework/Versions/11/bin/maple"

Habe gelesen, dass ich in irgendeine .profile-Datei die Zeile
alias maple-cli="/Library/Frameworks/Maple.framework/Versions/14/bin/maple" (bzw. dann wohl maple14 statt maple-cli?!)
einfügen muss, nur hab ich keine Ahnung was für ne .profile-Datei da gemeint ist.

Bitte um Hilfe :)
 
Alf89,

es geht darum, das Deine Shell das Alias kennt. Sofern Du die Bash verwendest (check: echo $SHELL), so wäre das die .profile Datei im $HOME / ~ Ordner. Mache er:

Code:
echo 'alias maple-cli="/Library/Frameworks/Maple.framework/Versions/14/bin/maple"' >> $HOME/.profile

Wenn Du die Shell dann neu startest, bzw. ~/.profile neu lädst -> ". ~/.profile" aufrufen, so wird der Alias gesetzt sein.
 
  • Gefällt mir
Reaktionen: Alf89
Super, danke dir :) Hat alles geklappt.
 
Ich hab leider nix in meine Applications Folder im Terminal. Das verwirrt mich jetzt etwas :(
 
Zurück
Oben Unten