Bagaimana cara meneruskan argumen baris perintah ke item Dock?

Jawaban:

96

Pada dasarnya Anda memiliki dua opsi:

Opsi 1 : Gunakan Automator untuk membuat aplikasi yang pada dasarnya meluncurkan Chrome dengan argumen baris perintah.

Mulai Automator dan pilih untuk membuat Aplikasi . Klik dua kali Jalankan Script Shell di folder Library / Utilities dan ganti konten teks - cat- dengan yang berikut:

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

Simpan di mana saja Anda suka.

Untuk mengganti ikon aplikasi ini, Dapatkan Info di Google Chrome asli Anda, klik ikon di kiri atas, tekan Cmd-C, Dapatkan Info di aplikasi Chrome Automator Anda, klik ikon, dan tekan Cmd-V.

Karena ini adalah aplikasi yang berbeda, Dock akan menampilkan dua aplikasi Chrome saat dijalankan: Chrome, dan peluncur Chrome Anda.


Opsi 2 : Edit bundel aplikasi Anda untuk meluncurkan skrip. Script ini akan memulai aplikasi yang sebenarnya, menambahkan argumen baris perintah.

Klik kanan Google Chrome.appdan pilih Tampilkan Konten Paket . Pergi ke Contents/dan buka Info.plistdi Editor Daftar Properti / Xcode (alat pengembang Apple), atau plisteditor pihak ketiga .

Cari entri CFBundleExecutableatau Executable File. Ingat nilainya (misalnya firefox-binuntuk Firefox). Ganti dengan parameterized-app.sh.

Buka Terminal dan masukkan yang berikut ini:

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

Editor untuk .shfile akan terbuka. Setel konten file ke:

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

(menggunakan nama yang dapat dieksekusi yang sebenarnya Anda hapus Info.plist, menambahkan argumen baris perintah yang diinginkan)

Simpan dan tutup. Di Terminal, masukkan yang berikut ini:

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

Sekarang, tutup Terminal dan pindahkan aplikasi Anda (yang tidak boleh berjalan sekarang) ke folder yang berbeda dan kembali lagi. Ini akan memperbarui Layanan Peluncuran , jika tidak perubahan Anda akan diabaikan dan membuat Anda jengkel.

Sekarang, ketika Anda membuka aplikasi Anda, itu sebenarnya akan mengeksekusi .shfile, yang pada gilirannya akan meluncurkan file yang dapat dieksekusi yang sebenarnya, mengirimkan argumen baris perintah bersama.

Ini akan terlihat dan berperilaku seperti yang Anda harapkan, tetapi Anda harus mengulang ini setiap kali Anda memperbarui aplikasi Anda, karena ini umumnya akan menggantikan bundel aplikasi dan semua perubahan yang Anda buat.

Daniel Beck
sumber
Untuk beberapa alasan, Chrome 10 saya mengabaikan argumen baris perintah dan pin secara otomatis tab yang disematkan di sesi sebelumnya. Tidak tahu apa yang salah di sini, karena saya bukan pengguna Chrome dan tidak tahu bagaimana seharusnya bersikap.
Daniel Beck
6
"pindahkan aplikasi Anda ke folder yang berbeda dan kembali lagi" harus berani - benar-benar terlewatkan pada saat pertama kali dibaca :)
stephanos
1
Apakah ada cara untuk memperbarui / mengatur ulang / memulai kembali Layanan Peluncuran melalui perintah shell sehingga Anda tidak perlu memindahkan aplikasi dan kembali lagi? yaitu agar langkah itu mudah skrip?
Jordan Brough
1
@Jordan Brough Anda dapat menggunakan utilitas lsregister untuk memaksa pembaruan LaunchServices:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross
1
Tentu saja, Opsi 2 hanya berfungsi pada aplikasi non-CodeSign. Jika itu berasal dari apel atau toko aplikasi, itu ditandatangani terhadap perubahan. Bahkan perubahan ke Info.plist akan menghentikannya. Dalam hal ini, aplikasi rintisan / pembungkus sederhana akan membantu.
cde
10

Anda dapat menulis skrip yang meluncurkan Chrome, tetapi itu bukan ikon aplikasi di dok, dan itu akan menyebabkan ikon Chrome yang terpisah muncul. Jadi, Anda harus membuat paket aplikasi.

Pertama, buat salinan aplikasi Chrome Anda. Lalu, ada dua pendekatan yang mungkin berhasil; Saya tidak yakin mana yang akan bermain lebih baik dengan Mac OS X dan / atau pembaruan otomatis Chrome.

  1. Buat 'peluncur' yang hanya memanggil Chrome dengan argumen.

    • Buka paket aplikasi (klik kanan → Tampilkan Konten Paket di Finder), dan buang semuanya kecuali Info.plist, PkgInfo, dan MacOS.
    • Di folder MacOS, hapus "Google Chrome" yang dapat dieksekusi dan gantikan dengan skrip shell yang menyebut Chrome asli:

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

      Jangan lupa chmod +xnaskahnya.
       

  2. Ubah paket Chrome yang sebenarnya Anda jalankan.

    • Di folder MacOS, ganti nama "Google Chrome" dan tulis skrip shell yang memanggil yang asli dengan argumen tambahan:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • Saya melihat paket Chrome memiliki sesuatu tentang penandatanganan kode; Anda mungkin perlu menghapus CodeResourcesdan / atau _CodeSignaturemenjalankannya dengan perubahan ini.

Ini semua berdasarkan pada pemahaman saya tentang paket aplikasi Mac; Saya belum benar-benar menguji perubahan ini pada Chrome secara khusus. Bahkan kemungkinan bahwa Chrome yang dapat dieksekusi pada Mac tidak mendukung opsi ini, karena aplikasi Mac umumnya tidak diharapkan dijalankan dengan opsi baris perintah yang dapat dikontrol (tidak seperti, misalnya, Windows, di mana aplikasi biasanya diluncurkan melalui pintasan yang dapat memiliki opsi tertanam).

Kevin Reid
sumber
Parameter dukungan Chrome, saya hanya otomatis milik saya mengikuti instruksi Anda # 2. Anda memang perlu menentukan path lengkap untuk biner, dan jangan lupa chmod 755 Google\ Chrome(skrip Anda) setelah selesai. Saya benar-benar menamai script saya launch.sh dan menghubungkannya dengan Google \ Chrome untuk kemudahan pembaruan.
Orwellophile
Perhatikan bahwa memodifikasi isi paket menyebabkan masalah dengan penandatanganan kode, menghasilkan masalah aneh seperti https tidak berfungsi dengan baik: bridge.grumpy-troll.org/2011/01/…
drevicko