Script Shell Aplikasi Mac OS X: dapatkan jalannya

6

Di Mac OS X, dari sudut pandang aplikasi skrip shell, bagaimana saya bisa mendapatkan jalur direktori bundelnya untuk digunakan dalam skrip shell ? Saat menggunakan perintah env, ia mengembalikan bahwa jalur eksekusi aplikasi adalah /, dan tidak ada variabel lingkungan yang membantu. Saya melakukan ini karena saya ingin mengakses beberapa sumber daya bundel, dan karena aplikasi tidak selalu diinstal di / Aplikasi.

Terima kasih!

moala
sumber
1
Apakah skrip shell milik sumber daya aplikasi? Lagi pula, pertanyaan ini milik Stackoverflow.
mouviciel
Dalam kasus saya, skrip shell ADALAH aplikasi yang dapat dieksekusi.
moala
Saya selalu ingin tahu jika / bagaimana saya bisa melakukan ini.
Guest

Jawaban:

6

DIR=$(cd "$(dirname "$0")"; pwd) akan memberikan nama direktori skrip shell. Untuk aplikasi skrip shell, ini akan menjadi /path/to/Your shell script application.app/Contents/MacOS.

moala
sumber
1

Saya menyarankan untuk mencoba which, tetapi tidak berfungsi untuk aplikasi Mac. Kamu bisa memakai menemukan , dengan mengingat bahwa aplikasi Mac dibundel, dan shell melihatnya sebagai direktori. Jangan lupa untuk menambahkan ekstensi untuk aplikasi (.app).

kiamlaluno
sumber
Masalah dengan find adalah itu SANGAT panjang, dan mungkin menemukan salinan lain dari program ... Masalahnya adalah tidak ditemukannya .app bundle ...
moala
1

Jika Anda bisa mendapatkan jalur absolut aplikasi ke file yang dapat dieksekusi, mendapatkan dir bundle itu semudah menambahkannya dengan /../ .. yang menjadikan Anda bundel utama. Jika Anda menginginkan sumber daya, tambahkan saja di atas / Sumber.

klep
sumber
0

Sunting: Anda menginginkan sesuatu yang sama sekali berbeda dari jawaban asli saya. Menyimpannya di bawah jika berguna bagi siapa pun. Sekarang saya pikir Anda sedang mencari basename perintah, meskipun saya masih tidak yakin dan saya pikir Anda harus menentukan lebih banyak informasi tentang apa yang Anda lakukan sebelum kami akan dapat memberikan jawaban yang layak.

Saya tidak yakin saya mengerti pertanyaannya. Apakah Anda mencoba mencari direktori aplikasi? Misalnya. untuk Kalkulator, Anda ingin direktori yang ada di 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

Atau apakah Anda mencari sesuatu yang sama sekali berbeda?

Jed Daniels
sumber
Benar-benar berbeda. Maaf karena tidak cukup jelas. Dari sudut pandang aplikasi yang dapat dieksekusi, saya ingin mendapatkan jalur bundle ...
moala
1
AH. Ala basename dalam skrip bash? Sepertinya pertanyaan ini akan lebih baik ditempatkan di Stack Overflow (mungkin sudah ditanyakan dan dijawab).
Jed Daniels
Mmmh tidak bekerja dengan basename ... Saya menemukan solusi berbeda: DIR = $ (cd "$ (dirname" $ ​​0 ")"; pwd) apakah lebih baik atau setara?
moala