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 terbuka. Agaknya, menggunakan perintah Applescript open
akan menghindari ini, tetapi 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?
Sunting
Menurut halaman Mozilla Wiki , yang terbaik adalah menggunakan skrip untuk menjalankan aplikasi dengan argumen. Menambahkan a &
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 &
sumber
&
itu masih milik Terminal, Anda dapat memperbaikinya dengan menambahkan barisdisown %/Applications/Firefox.app/Contents/MacOS/firefox
setelah Anda menjalankannya, maka Anda dapat dengan aman menutup Terminal, menggunakan AppleScript.Jawaban:
Inilah solusi terbaik saya: Buat Applescript dengan:
Dan simpan sebagai aplikasi .
Anda dapat menempatkan aplikasi apa pun dengan argumen apa pun di bagian pertama. Bagian setelah
&
kebutuhan untuk 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 ketika dijalankan dari Editor Skrip, hanya ketika dijalankan dari aplikasi skrip yang Anda buat.
sumber
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:
Itu akan memberi Anda semua perilaku yang Anda inginkan.
sumber
--args
dengan Chrome dan tidak berhasil. Ini hanya akan berfungsi untuk instance pertama . Jika Anda mencoba menjalankan dua--user-data-dir
secara bersamaan, Anda tidak dapat melakukannya denganopen
tetapi harus menjalankannya dengan/applications...
metode lama . Adakah yang tahu mengapa keparat itu--args
tidak berhasil?Buka Automator dan buat Aplikasi dengan tindakan Run Shell Script tunggal :
Aplikasi ini akan meluncurkan Firefox dan berhenti secara instan, hanya menyisakan Firefox yang berjalan.
Atau, buat aplikasi menggunakan AppleScript Editor dengan kode AppleScript berikut:
Keduanya berfungsi dengan baik dan tidak membuat Terminal atau aplikasi skrip berjalan lebih dari satu detik. Menggunakan Automator, Anda bahkan dapat membuat Layanan jika Anda memilihnya.
sumber
open --args
ini diterapkan pada 10.6.2, seperti yang telah disebutkan Bob.open eclipse.app -n
membuka ruang kerja Eclipse kedua. Sangat berguna. Terima kasih!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:
Atau dalam Skrip Apple:
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"). :(
sumber
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 untuk membunuh semuanya lebih dari sekadar proses applet induk (mis. Lainnya, secara bersamaan menjalankan aplikasi AppleScript (jika menggunakan "applet" sebagai polanya)).
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 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 untuk mengarahkan ulang stdout dan stderr dan membiarkan shell menjalankan program di latar belakang .
Gunakan Editor Skrip untuk menyimpan program berikut sebagai aplikasi AppleScript:
(jeda baris fungsional ditambahkan agar tetap "sempit"; hapus
¬
dan\\
dan letakkan semuanya pada satu garis panjang jika Anda mau)Ini akan berjalan cukup lama untuk memulai Firefox dan akan keluar dengan bersih sementara Firefox terus berjalan.
Pengalihan diperlukan karena script shell tidak hanya menunggu anak langsung (shell) untuk keluar, tetapi juga menunggu (semua contoh) ujung pipa yang dapat ditulisi yang dibuatnya agar stdout dan stderr shell ditutup. . Stdout dan stderr shell ( melakukan pipa script shell ) 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, script shell akan kembali segera setelah shell keluar, memungkinkan aplikasi AppleScript sendiri untuk keluar (karena script shell adalah ekspresi terakhir dalam program AppleScript).Jawaban lain yang menggunakan buka di dalam melakukan skrip shell berfungsi karena terbuka (sebenarnya LaunchServices) melakukan pekerjaan yang setara dengan latar belakang program yang dihasilkan dan mengirimkan stdout dan stderr di tempat lain.
sumber
open --args
terlihat lebih bersih. apakah ada kelemahan dalam menggunakan salah satunya?open --args
mungkin baik-baik saja.AppleScript
Dua poin di sana.
Namun itu bekerja dengan baik pada 10.6.5
sumber
applet
mengacu pada?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, temukan kunci Args, edit.
Saya tidak memiliki mesin OS X yang berguna saat ini, jadi saya tidak dapat memeriksa apakah Anda juga bisa melakukan ini pada alias (jika Anda ingin menjaga .app bebas argumen asli, dan lain-lain).
sumber
Bungkus aplikasi Anda di dalam peluncur AppleScript.
Inilah langkah-langkahnya.
Buat AppleScript dengan konten berikut, dan simpan sebagai aplikasi (dalam contoh ini diberi nama "Firefox 3 launcher.app").
Dapatkan aplikasi itu di Finder, klik kanan, tampilkan konten paket.
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
Anda sekarang dapat membuka peluncur aplikasi Anda.
Catatan:
sumber
Mengapa Anda tidak menggunakan:
Sederhana tetapi berhasil.
sumber
The
open
perintah memiliki opsional--args
argumen bahwa nilai akan diteruskan ke aplikasi dibuka sebagai argumen. Sebagai contoh:sumber