Сценарий оболочки Mac OS X App: получить свой путь

5056
moala

В Mac OS X, с точки зрения приложения сценария оболочки, как я могу получить путь к каталогу пакета для использования в сценарии оболочки ? При использовании команды env возвращается, что путь выполнения приложения - /, и никакая переменная среды не помогает. Я делаю это потому, что хотел бы получить доступ к некоторым ресурсам пакета, а также потому, что приложение не всегда устанавливается в / Applications.

Спасибо!

6
Принадлежит ли скрипт оболочки ресурсам приложения? Во всяком случае, этот вопрос принадлежит Stackoverflow. mouviciel 13 лет назад 1
В моем случае сценарий оболочки - это исполняемый файл приложения. moala 13 лет назад 0
Я всегда хотел знать, смогу ли я сделать это. user 13 лет назад 0

4 ответа на вопрос

6
moala

DIR=$(cd "$(dirname "$0")"; pwd)даст имя каталога сценария оболочки. Для приложения сценария оболочки это будет /path/to/Your shell script application.app/Contents/MacOS.

1
kiamlaluno

Я предлагал попробовать which, но это не работает для приложений Mac. Вы можете использовать find, имея в виду, что приложения Mac связаны, и оболочка видит их как каталог. Не забудьте добавить расширение для приложений (.app).

Проблема с find заключается в том, что она ОЧЕНЬ длинная и может найти другую копию программы ... Проблема в том, что она не находит никаких пакетов .app ... moala 13 лет назад 0
1
klep

Если вы можете получить абсолютный путь приложения к исполняемому файлу, получить dir комплекта так же просто, как добавить его к /../ .., чтобы получить основной комплект. Однако если вы хотите получить ресурсы, просто добавьте к вышеприведенному разделу / Ресурсы.

0
Jed Daniels

Изменить: Вы хотите что-то совершенно другое, чем мой первоначальный ответ. Держите его ниже на тот случай, если он кому-нибудь пригодится. Теперь я думаю, что вы ищете basenameкоманду, хотя я все еще не уверен, и я думаю, вам нужно будет указать больше информации о том, что вы делаете, прежде чем мы сможем дать вам достойный ответ.

Я не уверен, что понимаю вопрос. Вы пытаетесь найти каталог приложения? Например, для калькулятора, вы хотите каталог, в котором находится Calculator.app?

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 

Или вы ищете что-то совершенно другое?

Совершенно разные. Извините, что не достаточно ясно. С точки зрения исполняемого приложения я бы хотел получить путь к пакету ... moala 13 лет назад 0
AH. Аля `basename` в скрипте bash? Похоже, этот вопрос лучше было бы поместить в переполнение стека (возможно, он уже был задан и получен ответ). Jed Daniels 13 лет назад 1
Мммм не работает с базовым именем ... Я нашел другое решение: DIR = $ (cd "$ (dirname" $ ​​0 ")"; pwd) это лучше или эквивалентно? moala 13 лет назад 0