Shell-Skript Mac OS X App: Ermitteln Sie den Pfad

5240
moala

Wie kann ich unter Mac OS X aus der Sicht einer Shell-Skriptanwendung den Pfad des Bundle-Verzeichnisses zur Verwendung in einem Shell-Skript erhalten ? Bei Verwendung des Befehls env wird zurückgegeben, dass der Ausführungspfad der App / ist und keine Umgebungsvariable hilfreich ist. Ich mache das, weil ich auf einige Ressourcen des Bundles zugreifen möchte und die App nicht immer in / Applications installiert ist.

Vielen Dank!

6
Gehört das Shell-Skript zu den App-Ressourcen? Jedenfalls gehört diese Frage zu Stackoverflow. mouviciel vor 13 Jahren 1
In meinem Fall ist das Shell-Skript die ausführbare Datei der App. moala vor 13 Jahren 0
Ich wollte schon immer wissen, ob und wie ich das schaffen könnte. user vor 13 Jahren 0

4 Antworten auf die Frage

6
moala

DIR=$(cd "$(dirname "$0")"; pwd)gibt den Verzeichnisnamen des Shell-Skripts an. Bei einer Shell-Skript-App wird dies der Fall sein /path/to/Your shell script application.app/Contents/MacOS.

1
kiamlaluno

Ich habe vorgeschlagen zu versuchen which, aber es funktioniert nicht für Mac-Anwendungen. Sie können find verwenden, wobei zu beachten ist, dass Mac-Anwendungen gebündelt sind und eine Shell sie als Verzeichnis sieht. Vergessen Sie nicht, die Erweiterung für Anwendungen (.app) hinzuzufügen.

Das Problem mit find ist, dass es SEHR lang ist und möglicherweise eine andere Kopie des Programms findet ... Das Problem, mit dem es ist, dass es kein .app-Bundle findet ... moala vor 13 Jahren 0
1
klep

Wenn Sie den absoluten Pfad der Anwendung zur ausführbaren Datei abrufen können, ist das Abrufen des Bundle-Verzeichnisses so einfach wie das Anhängen des Befehls mit /../ .., wodurch Sie das Hauptpaket erhalten. Wenn Sie die Ressourcen jedoch möchten, fügen Sie einfach die obigen Ressourcen hinzu.

0
Jed Daniels

Edit: Du willst etwas ganz anderes als meine ursprüngliche Antwort. Halten Sie es unten, falls es für jedermann nützlich ist. Jetzt denke ich, dass Sie nach dem basenameBefehl suchen, obwohl ich immer noch nicht sicher bin, und ich denke, Sie müssen weitere Informationen dazu angeben, was Sie tun, bevor wir Ihnen eine anständige Antwort geben können.

Ich bin nicht sicher, ob ich die Frage verstehe. Versuchen Sie, das Anwendungsverzeichnis zu finden? ZB für den Rechner wollen Sie das Verzeichnis, in dem sich Calculator.app befindet?

jed@jed-osx:~$ ls -la /Applications/Calculator.app/ total 0 drwxr-xr-x 3 root wheel 102 Jun 22 11:27 . drwxrwxr-x+ 46 root admin 1564 Jun 18 23:19 .. drwxr-xr-x 10 root wheel 340 Jun 22 11:26 Contents  jed@jed-osx:~$ ls -la /Applications/Calculator.app/Contents/ total 8 drwxr-xr-x 10 root wheel 340 Jun 22 11:26 . drwxr-xr-x 3 root wheel 102 Jun 22 11:27 .. lrwxr-xr-x 1 root wheel 28 Apr 17 15:15 CodeResources -> _CodeSignature/CodeResources -rw-r--r-- 1 root wheel 1201 May 6 10:26 Info.plist drwxr-xr-x 3 root wheel 102 Jun 22 11:26 MacOS -rw-r--r-- 1 root wheel 8 Jul 6 2009 PkgInfo drwxr-xr-x 4 root wheel 136 Jul 6 2009 PlugIns drwxr-xr-x 42 root wheel 1428 Apr 17 15:28 Resources drwxr-xr-x 3 root wheel 102 Jun 22 11:26 _CodeSignature -rw-r--r-- 1 root wheel 451 May 6 10:27 version.plist 

Oder suchen Sie etwas ganz anderes?

Komplett anders. Entschuldigung, dass ich nicht klar genug bin. Aus der Sicht der App möchte ich den Pfad des Bundles erhalten ... moala vor 13 Jahren 0
AH. Ala `basename` in einem Bash-Skript? Es klingt, als würde diese Frage besser auf Stack Overflow gesetzt (wahrscheinlich wurde sie bereits gestellt und beantwortet). Jed Daniels vor 13 Jahren 1
Mmmh funktioniert nicht mit basename ... Ich habe eine andere Lösung gefunden: DIR = $ (cd "$ (dirname" $ ​​0 ")"; pwd) ist es besser oder gleichwertig? moala vor 13 Jahren 0