it-swarm.asia

Bagaimana saya bisa menjalankan aplikasi dengan argumen baris perintah di Mac OS

Apakah ada cara mudah untuk menambahkan argumen baris perintah ke aplikasi di Mac? Misalnya, untuk menjalankan Opera dalam mode kios atau untuk menggunakan profil lain di Firefox, saya bisa mengetik

$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote

Di Windows saya dapat menambahkan argumen ke properti pintasan, tetapi karena Mac tidak menggunakan pintasan per se dan menjalankan aplikasi secara langsung, ini tidak mungkin.

Saya telah menemukan bahwa meluncurkan aplikasi melalui bash atau Applescript sebagian berfungsi:

# Bash
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote

# Applescript    
do Shell script "exec /Applications/Opera.app/Contents/MacOS/Opera -kioskmode"

Saya dapat membuat ini dapat dieksekusi dan menetapkan ikon dan semuanya berfungsi dengan baik kecuali bahwa ketika saya menjalankan salah satu dari program semu ini, jendela terminal atau ikon Applescript tetap terbuka selama aplikasi tersebut terbuka. Agaknya, menggunakan perintah Applescript open akan menghindari ini, tapi karena saya tidak menjalankan aplikasi seperti yang dipaket (hanya /Applications/Firefox), itu tidak berfungsi.

Jadi, apakah ada cara yang lebih baik untuk menjalankan aplikasi dengan argumen baris perintah? Jika tidak, apakah ada cara untuk mencegah sesi terminal atau ikon Applescript tetap terbuka saat aplikasi terbuka?

Edit

Menurut halaman Mozilla Wiki , yang terbaik adalah menggunakan skrip untuk menjalankan aplikasi dengan argumen. Menambahkan & ke akhir skrip akan membunuh jendela Terminal yang persisten. Satu-satunya gangguan sekarang adalah bahwa ia membuka jendela Terminal mati, keluar (yang lebih baik daripada yang gigih, tapi masih ...)

#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
59
Andrew

Inilah solusi terbaik saya: Buat Applescript dengan:

do Shell script "/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote & killall Firefox.app"

Dan simpan sebagai aplikasi .

Anda dapat menempatkan aplikasi apa pun dengan argumen apa pun di bagian pertama. Bagian setelah & perlu membunuh apa pun yang Anda beri nama skrip + .app. Anda akan melihat aplikasi skrip menyala di dok, tetapi kemudian akan menghilang.

Catatan: Skrip tidak akan berfungsi dengan benar saat dijalankan dari Editor Skrip, hanya ketika dijalankan dari aplikasi skrip yang Anda buat.

16
MJeffryes

Mulai di OS X 10.6.2, perintah terbuka dapat meneruskan argumen ke aplikasi yang dibuka melalui flag --args. AppleScript untuk menggunakannya terlihat seperti ini:

do Shell script "open -a /Applications/Firefox.app --args -P default -no-remote"

Itu akan memberi Anda semua perilaku yang Anda inginkan.

25
Bob

Buka Automator dan buat Aplikasi dengan satu Jalankan Script Shell tindakan:

 /Applications/Firefox.app/Contents/MacOS/firefox-bin -here-some-args &

Aplikasi ini akan meluncurkan Firefox dan berhenti secara instan, hanya menyisakan Firefox yang berjalan.


Atau, buat aplikasi menggunakan Editor AppleScript dengan kode AppleScript berikut:

do Shell script "open -a '/Users/danielbeck/Applications/Firefox.app' --args -ProfileManager"

Keduanya berfungsi dengan baik dan tidak membiarkan Terminal atau aplikasi skrip berjalan lebih dari satu detik. Menggunakan Automator, Anda bahkan dapat membuat Layanan jika Anda memilihnya.

11
Daniel Beck

Ini adalah diskusi lama, tetapi masih muncul di pencarian Google, jadi saya pikir saya akan menambahkan beberapa ¢.

Mungkin lebih baik menggunakan "pengidentifikasi bundel" daripada jalur absolut ke yang dapat dieksekusi:

open -b com.google.Chrome --args --profile-directory="Profile 1"

Atau dalam Skrip Apple:

do Shell script "open -b com.google.Chrome --args --profile-directory='Profile 1'"

Yang belum saya ketahui adalah bagaimana membuka instance/window baru dengan profil yang berbeda begitu yang pertama sudah terbuka. (Jika saya menjalankan AppleScript di atas, lalu yang lain dengan "Profil 2", maka Chrome masih akan membuka jendela lain sebagai "Profil 1"). :(

8
user1722483

Tidak perlu (karena beberapa jawaban lain telah menyarankan) untuk menggunakan killall (atau serupa) untuk membunuh proses aplikasi AppleScript induk ("applet") dalam skenario ini. Ia bahkan dapat memiliki efek samping yang tidak diinginkan jika nama/pola yang diberikan kepada killall cocok lebih dari sekadar proses applet induk (mis. Lainnya, menjalankan aplikasi AppleScript secara bersamaan (jika menggunakan "applet" sebagai pola)).

Sesuatu seperti kill $PPID mungkin lebih masuk akal, tetapi kami mungkin tidak ingin berasumsi bahwa applet dari aplikasi AppleScript selalu merupakan induk langsung dari Shell yang dimulai dengan do script Shell . Untungnya, ada cara yang masuk akal untuk melakukan apa yang Anda butuhkan.

Per TN2065 (di bawah "Saya ingin memulai proses server latar belakang; bagaimana saya membuat skrip Shell jangan menunggu sampai perintah selesai?"), Metode yang tepat adalah dengan mengarahkan ulang stdout dan stderr dan biarkan Shell menjalankan program di latar belakang.

Gunakan Script Editor untuk menyimpan program berikut sebagai aplikasi AppleScript:

do Shell script ¬
    "/Applications/Firefox.app/Contents/MacOS/firefox-bin \\
        -P default -no-remote \\
        >/dev/null 2>&1 &"

(jeda baris fungsional ditambahkan agar tetap "sempit"; hapus ¬ dan \\ dan letakkan semuanya pada satu garis panjang jika diinginkan)

Ini akan berjalan cukup lama untuk memulai Firefox dan akan keluar dengan bersih sementara Firefox terus berjalan.

Pengalihan diperlukan karena tidak hanya melakukan skrip Shell menunggu anak terdekatnya (Shell) untuk keluar, tetapi juga menunggu (semua contoh) ujung yang dapat ditulis dari pipa yang dibuatnya agar stdout dan stderr Shell ditutup. Stdout dan stderr Shell ( do script Shell adalah pipa) diwarisi oleh program yang dijalankan tanpa pengalihan (bahkan yang berjalan di latar belakang dengan &); pengalihan memastikan bahwa Shell adalah yang terakhir untuk memegang ujung pipa yang dapat ditulisi. Jadi, lakukan skrip Shell akan segera kembali setelah Shell keluar, memungkinkan aplikasi AppleScript sendiri untuk keluar (karena lakukan skrip Shell adalah ekspresi terakhir dalam program AppleScript).

Jawaban lain yang menggunakan buka di dalam melakukan skrip Shell berfungsi karena buka ( sebenarnya LaunchServices) melakukan pekerjaan yang setara dengan latar belakang program yang dihasilkan dan mengirimkan stdout dan stderr di tempat lain.

7
Chris Johnsen

AppleScript

do Shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --incognito & killall applet"

Dua poin di sana.

  1. Ruang diloloskan oleh backslash yang lolos oleh backslash lagi
  2. killall applet dapat menyebabkan masalah, karena mungkin ada applet lain yang berjalan
  3. Simpan sebagai program

Namun itu bekerja dengan baik pada 10.6.5

4
anonymous

Berikut ini harus membiarkan Anda menentukan argumen baris perintah untuk .app itu sendiri:

Klik kanan bundel .app, pilih "Tampilkan Isi Paket", navigasikan ke Info.plist, klik dua kali, cari kunci Args, edit.

Saya tidak memiliki mesin OS X yang berguna saat ini, jadi saya tidak dapat memeriksa apakah Anda juga dapat melakukan ini pada alias (jika Anda ingin menjaga .app bebas argumen asli, dan lain-lain).

2
Dav

Bungkus aplikasi Anda di dalam peluncur AppleScript.

Inilah langkah-langkahnya.

  1. Buat AppleScript dengan konten berikut, dan simpan sebagai aplikasi (dalam contoh ini diberi nama "Firefox 3 launcher.app").

    set pathToApp to (POSIX path of (path to me)) & "Firefox 3.app"
    do Shell script "open -a \"" & pathToApp & "\" --args -P default -no-remote"
    
  2. Dapatkan aplikasi itu di Finder, klik kanan, tampilkan konten paket.

  3. Tempatkan aplikasi Anda di root dari isi paket. (Dalam contoh ini akan menjadi "Firefox 3.app")

    Hasil: /Aplikasi/Firefox 3 launcher.app/Firefox 3.app

  4. Anda sekarang dapat membuka peluncur aplikasi Anda.

Catatan:

  • Pembaruan otomatis dari aplikasi yang dibungkus akan berfungsi dalam banyak kasus.
  • Seharusnya dimungkinkan untuk melakukan seret dan lepas ke peluncur secara otomatis dialihkan ke aplikasi yang dibungkus (dengan skrip yang sedikit lebih).
  • Peluncur keluar secara otomatis setelah aplikasi yang dibungkus diluncurkan.
  • Keuntungan dari metode ini adalah ada sedikit risiko membuka aplikasi yang dibungkus secara langsung.
2
jlgrall

Perintah open memiliki argumen --args opsional yang nilainya akan diteruskan ke aplikasi yang dibuka sebagai argumen. Sebagai contoh:

open /Applications/TextEdit.app --args example.txt
0
ecnepsnai