Komut satırı değişkenlerini Dock öğelerine nasıl iletirim?


Yanıtlar:


96

Temel olarak iki seçeneğiniz var:

Seçenek 1 : Geçerli olarak Chrome'u komut satırı argümanları ile başlatan bir uygulama oluşturmak için Otomatikleştirici'yi kullanın.

Automator'ı başlatın ve bir Uygulama oluşturmayı seçin . Çift tıklayın Çalıştır Shell Komut içinde Kütüphane / Kamu klasörüne ve metin içeriğini değiştirmek - cat- aşağıdaki:

open -a "Google Chrome.app" --args -pinned-tab-count=4
# keep the .app suffix or will break with Parallels

İstediğiniz yerden tasarruf edin.

Bu uygulamanın simgesini değiştirmek için gerçek Google Chrome'unuzdan Bilgi Al'ı tıklatın, sol üstteki simgeye tıklayın, simgesine basın Cmd-C, Chrome Automator uygulamanızda Bilgi Alın , simgesine tıklayın ve düğmesine basın Cmd-V.

Farklı bir uygulama olduğundan, Dock çalışırken iki Chrome uygulamasını görüntüler: Chrome ve Chrome başlatıcınız.


Seçenek 2 : Bunun yerine bir komut dosyası başlatmak için uygulama paketinizi düzenleyin. Bu komut dosyası, komut satırı argümanını ekleyerek gerçek uygulamayı başlatır.

Sağ tıklayın Google Chrome.appve Paket İçeriğini Göster öğesini seçin . Gidin Contents/ve açılır Info.plistiçinde Mülkiyet Liste Editör / Xcode (Apple geliştirici araçları), veya bir üçüncü taraf plisteditörü.

Girişi arayın CFBundleExecutableveya Executable File. Değerini hatırlayın (örn firefox-bin. Firefox için). İle değiştirin parameterized-app.sh.

Terminal'i açın ve aşağıdakileri girin:

touch /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh
open /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

.shDosya için bir editör açılacaktır. Dosyanın içeriğini şu şekilde ayarlayın:

#!/usr/bin/env bash
exec /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

(kaldırdığınız gerçek yürütülebilir dosya adını kullanarak Info.plististenen komut satırı değişkenlerini ekleyerek)

Kaydet ve kapat. Terminal'de aşağıdakileri girin:

chmod +x /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

Şimdi Terminal'i kapatın ve uygulamanızı (şu anda çalışmaması gereken) farklı bir klasöre taşıyın ve tekrar geri getirin. Bu, Başlatma Hizmetlerini güncelleyecektir , aksi takdirde değişiklikleriniz göz ardı edilir ve sizi çok rahatsız eder.

Şimdi, uygulamanızı açtığınızda .sh, asıl çalıştırılabilir dosyayı başlatacak ve ardından komut satırı argümanlarını gönderecek olan dosyayı çalıştıracaktır.

Beklediğiniz gibi görünecek ve davranacak, ancak uygulamanızı her güncellediğinizde bunu tekrarlamanız gerekecek, çünkü bu genellikle uygulama paketini ve yaptığınız tüm değişiklikleri değiştirecektir.


Nedense, Chrome 10'um komut satırı argümanını yok sayar ve önceki oturumda sabitlenmiş sekmeleri otomatik olarak sabitler. Burada neyin yanlış olduğunu bilmiyorum, çünkü ben bir Chrome kullanıcısı değilim ve nasıl davranması gerektiğini bilmiyorum.
Daniel Beck

6
"uygulamanızı farklı bir klasöre taşıyın ve tekrar geri dönün" kalın olmalı - ilk okurken tamamen kaçırdım :)
stephanos

1
Uygulamayı tekrar tekrar dışarı taşımak zorunda kalmamanız için bir kabuk komutu ile Launch Services'i güncellemek / sıfırlamak / yeniden başlatmak için bir yol var mı? Yani bu adım kolayca yazılabilir ki?
Jordan Brough,

1
@Jordan Brough Bir LaunchServices güncellemesini zorlamak için lsregister yardımcı programını kullanabilirsiniz:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross

1
Elbette, Seçenek 2 yalnızca CodeSign olmayan uygulamalarda çalışır. Elma veya uygulama mağazasından geliyorsa, değişikliklere karşı imzalanmıştır. Info.plist'te yapılan bir değişiklik bile onu durduracaktır. Bu durumda, basit bir taslak / sarmalayıcı uygulaması yardımcı olacaktır.
cde

10

Chrome'u başlatan, ancak yuvadaki uygulama simgesi olmayacak bir komut dosyası yazabilirsiniz ve ayrı bir Chrome simgesinin görünmesine neden olur. Yani bir uygulama paketi oluşturmanız gerekecek.

İlk önce, Chrome uygulamanızın bir kopyasını alın. O zaman işe yarayabilecek iki yaklaşım var; Mac OS X ve / veya Chrome'un kendi güncellemesiyle hangisinin daha iyi oynayacağından emin değilim.

  1. Yalnızca bağımsız değişkenlerle Chrome'u çağıran bir 'başlatıcı' yapın.

    • Uygulama paketini açın (→ Bulucudaki Paket İçeriğini Göster'e sağ tıklayın) ve Info.plist, PkgInfo ve MacOS dışında her şeyi atın.
    • MacOS klasöründe, “Google Chrome” çalıştırılabilir dosyasını silin ve gerçek Chrome'u çağıran bir kabuk komut dosyasıyla değiştirin:

      #!/bin/sh
      exec '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' -pinned-tab-count=4
      

      chmod +xSenaryoyu unutma .
       

  2. Çalıştığınız Chrome paketini değiştirin.

    • MacOS klasöründe, “Google Chrome” adını değiştirin ve ekstra argümanlarla asıl şeyi çağıran bir kabuk komut dosyası yazın:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • Chrome paketinin kod imzalama hakkında bir şeyleri olduğunu görüyorum; Bu değişikliklerle çalışmasını sağlamak için CodeResourcesve / veya silmeniz gerekebilir _CodeSignature.

Bunların hepsi Mac uygulama paketlerini anlamama dayanıyor; Bu değişiklikleri özellikle Chrome'da özellikle test etmedim. Mac'te çalıştırılabilir Chrome'un bu seçeneği desteklememesi bile mümkündür, çünkü Mac uygulamalarının kontrol edilebilir komut satırı seçenekleriyle çalıştırılması beklenmez (örneğin, Windows’un aksine, uygulamaların normalde kullanılabilecek kısayollar aracılığıyla başlatıldığı Windows’tan farklı olarak). gömülü seçeneklere sahip).


Krom destek parametreleri, sadece 2 numaralı talimatınızı izleyerek otomatikleştirdim. İkili dosya için tam yolu belirlemeniz gerekir ve chmod 755 Google\ Chrometamamladıktan sonra (komut dosyanızı) unutma . Aslında betiğimi launch.sh olarak adlandırdım ve güncelleme kolaylığı için onu Google \ Chrome ile eşleştirdim.
Orwellophile

Paket içeriğinin değiştirilmesinin kod imzalamada sorunlara neden olduğunu ve https gibi düzgün olmayan sorunların ortaya çıkmadığını
unutmayın
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.