it-swarm.asia

Mac OS'de bir uygulamayı komut satırı değişkenleriyle nasıl çalıştırabilirim?

Mac'te bir uygulamaya komut satırı argümanları eklemenin kolay bir yolu var mı? Örneğin, Opera'yı kiosk modunda çalıştırmak veya Firefox'ta farklı bir profil kullanmak için yazabilirim.

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

Windows'ta, argümanları kısayol özelliklerine ekleyebilirim, ancak Mac'ler kısayol kullanmıyor ve uygulamaları doğrudan çalıştırıyorlar, bu mümkün değil.

Uygulamaların bash veya Applescript ile başlatılmasının kısmen işe yaradığını buldum:

# 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"

Bunları çalıştırılabilir hale getirip bir simge atayabilirim ve bu sözde programlardan birini çalıştırdığımda, bir terminal penceresi veya bir Applescript simgesinin uygulama açık olduğu sürece açık kalması dışında her şey harika çalışıyor. Muhtemelen, Applescript komutunu open kullanmak, bunu engeller, ancak uygulamayı paketlendiği gibi çalıştırmadığımdan (sadece /Applications/Firefox) çalışmaz.

Peki, uygulamaları komut satırı argümanları ile çalıştırmanın daha iyi bir yolu var mı? Değilse, uygulama açıkken kalıcı bir terminal oturumunun veya Applescript simgesinin açık kalmasını önlemenin bir yolu var mı?

Düzenle

Mozilla Wiki sayfasına göre , uygulamayı argümanlarla çalıştırmak için bir komut dosyası kullanmak en iyisidir. Betiğin sonuna bir & eklemek, kalıcı Terminal penceresini öldürür. Şu andaki tek sıkıntı ölü, oturumu kapatılmış bir Terminal penceresi açmasıdır (kalıcı olandan daha iyidir, ama yine de ...)

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

İşte en iyi çözümüm: Şunlarla bir Applescript oluşturun:

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

Ve bir uygulama olarak kaydedin .

İlk bölümde ne olursa olsun ne olursa olsun uygulama koyabilirsiniz. & 'dan sonraki bölüm, script + .app olarak adlandırdığınız şeyi öldürmek zorundadır. Komut dosyası uygulamasının yuvada yanıp söndüğünü göreceksiniz, ancak daha sonra kaybolacak.

Not: Komut Dosyası, Komut Dosyası Düzenleyicisi'nden çalıştırıldığında, yalnızca oluşturduğunuz komut dosyası uygulamasından çalıştırıldığında düzgün çalışmaz.

16
MJeffryes

OS X 10.6.2'den başlayarak, open komutu --args bayrağı aracılığıyla açtığı uygulamaya argümanları iletebilir. Kullanmak için bir AppleScript şöyle görünür:

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

Bu size istediğiniz tüm davranışları vermelidir.

25
Bob

Automator 'ı açın ve tek bir Run Shell Script eylemiyle bir Uygulama oluşturun:

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

Bu uygulama Firefox’u başlatır ve anında kapanır ve yalnızca Firefox çalışır durumda kalır.


Alternatif olarak, aşağıdaki AppleScript koduyla AppleScript Editor kullanarak bir uygulama oluşturun:

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

Her ikisi de iyi çalışır ve Terminal veya bir komut dosyası uygulamasını bir saniyeden daha uzun süre çalışır durumda tutmaz. Automator kullanarak, eğer istersen bir Servis bile oluşturabilirsin.

11
Daniel Beck

Bu eski bir tartışma, ancak yine de Google aramalarında ortaya çıkıyor, bu yüzden birkaç tane ekleyeyim dedim.

Yürütülebilir dosyanın mutlak yolundan ziyade "paket tanımlayıcısı" kullanmak daha iyidir:

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

Veya bir Apple Scriptinde:

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

Henüz anlamadığım şey, birincisi zaten açıldığında, farklı bir profile sahip yeni bir örnek/pencerenin nasıl açılacağı. (Eğer AppleScript'i yukarıdaki "Profil 2" ile çalıştırıyorsam, Chrome yine de "Profil 1" olarak başka bir pencere açacaktır). :(

8
user1722483

Bu senaryoda ana AppleScript uygulama işlemini (“applet”) öldürmek için killall (veya benzeri) kullanılması gerekli değildir (diğer bazı yanıtların önerdiği gibi). killall öğesine verilen ad/desen yalnızca üst uygulama işleminden daha fazlasıyla eşleşirse (ör. Diğer, eşzamanlı olarak çalışan AppleScript uygulamalarını (örüntü olarak "applet" kullanıyorsa)), istenmeyen yan etkileri bile olabilir.

kill $PPID gibi bir şey daha makul olabilir, ancak bir AppleScript uygulamasının uygulamasının her zaman do Shell betiği ile başlayan Shell'in hemen ebeveyni olduğunu varsaymak istemeyebiliriz. Neyse ki, ihtiyacınız olanı yapmak için mükemmel bir yol var.

TN2065 (“Arka plan sunucu işlemini başlatmak istiyorum; Shell betiğini komut tamamlanana kadar beklememesini nasıl sağlayabilirim?” Başlığı altında), uygun yöntem stdout ve stderr komutunu yönlendirmek ve Shell'in Kabuğu çalıştırmasını sağlamaktır. arka planda program.

Aşağıdaki programı bir AppleScript uygulaması olarak kaydetmek için Script Editor öğesini kullanın:

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

("dar" tutmak için eklenmiş fonksiyonel satır sonları; ¬ ve \\ öğelerini silin ve isterseniz hepsini tek bir uzun satıra yerleştirin)

Firefox 'ı başlatmak için yeterince uzun çalışacak ve Firefox çalışmaya devam ederken temiz bir şekilde çıkacaktır.

Yönlendirme, sadece do sadece Shell komut dosyasını bekleten çocuğun (Shell) çıkmasını beklemekle kalmaz, aynı zamanda Shell için oluşturduğu boruların yazılabilir uçlarının (tüm örneklerini) bekler. stdout ve stderr kapatılacak. Shell’in stdout ve stderr ( do Shell komut dosyası ’s boruları), yeniden yönlendirme olmadan çalıştığı programlar tarafından miras alınır (arka planda & ile çalışanlar bile); Yönlendirme, Shell'in, boruların yazılabilir uçlarını tutan son kişi olmasını sağlar. Böylece, do Shell komut dosyası , Shell çıktıktan hemen sonra geri dönerek AppleScript uygulamasının kendisinin çıkmasına izin verir ( do Shell komut dosyası , AppleScript programındaki son ifadedir).

open inside komutunu kullanan diğer cevaplar, Shell script work çünkü open (aslında LaunchServices), sonuçta ortaya çıkan programı arka plana alma ve stdout ve stderr gönderme işlevini yerine getirir. başka yerde.

7
Chris Johnsen

AppleScript

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

Orada iki puan.

  1. Uzay, tekrar ters eğik çizgiden kaçan ters eğik çizgiden kaçar
  2. killall applet , sorunlara neden olabilir, çünkü çalışan diğer uygulamalar olabilir
  3. Program olarak kaydet

Ancak 10.6.5'te iyi çalışıyor

4
anonymous

Aşağıdakiler, .app'ın kendisi için komut satırı argümanlarını belirtmenize izin vermelidir:

.App paketini sağ tıklayın, "Paket İçeriğini Göster" i seçin, Info.plist'e gidin, çift tıklayın, Args anahtarını bulun, düzenleyin.

Şu anda kullanışlı bir OS X makinem yok, bu yüzden bunu başka bir takma adla da yapıp yapamayacağınızı kontrol edemiyorum (orijinal .app argümansız, et cetera'yı korumak istiyorsanız).

2
Dav

Uygulamanızı bir AppleScript başlatıcısının içine sarın.

İşte adımlar.

  1. Aşağıdaki içeriğe sahip bir AppleScript oluşturun ve bunu bir uygulama olarak kaydedin (bu örnekte "Firefox 3 launcher.app" olarak adlandırılmıştır).

    set pathToApp to (POSIX path of (path to me)) & "Firefox 3.app"
    do Shell script "open -a \"" & pathToApp & "\" --args -P default -no-remote"
    
  2. Finder'daki bu uygulamaya geçtiniz, sağ tıklayın, paket içeriğini gösterin.

  3. Uygulamanızı paket içeriğinin kök dizinine yerleştirin. (Bu örnekte "Firefox 3.app" olur)

    Sonuç: / Uygulamalar/Firefox 3 launcher.app/Firefox 3.app

  4. Şimdi uygulama başlatıcınızı açabilirsiniz.

Notlar:

  • Sarılmış uygulamanın otomatik güncellemeleri çoğu durumda çalışmalıdır.
  • Kaydırılan uygulamaya otomatik olarak yönlendirilen (biraz daha fazla komut dosyasıyla) başlatıcıya herhangi bir sürükle ve bırak işlemi yapmak mümkün olmalıdır.
  • Sarılmış uygulama başlatıldıktan sonra başlatıcı otomatik olarak çıkar.
  • Bu yöntemin bir avantajı, sarılmış uygulamayı doğrudan açma riskinin az olmasıdır.
2
jlgrall

open komutu, açılmış uygulamaya argüman olarak iletilecek olan isteğe bağlı bir --args argümanına sahiptir. Örneğin:

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