मैं डॉक आइटम पर कमांड लाइन तर्क कैसे पास करूं?


73

मैं Chrome में स्टार्टअप टैब को पिन करने के निर्देशों का पालन करने का प्रयास कर रहा हूं । OS X पर मैं अपनी गोदी में बनी वस्तुओं पर कमांड लाइन तर्क कैसे जोड़ूं?

जवाबों:


96

आपके पास मूल रूप से दो विकल्प हैं:

विकल्प 1 : एक एप्लिकेशन बनाने के लिए ऑटोमेटर का उपयोग करें जो प्रभावी रूप से कमांड लाइन तर्क के साथ क्रोम लॉन्च करता है।

ऑटोमेटर शुरू करें और एक एप्लिकेशन बनाने के लिए चुनें । लाइब्रेरी / यूटिलिटीज फोल्डर में रन शैल स्क्रिप्ट पर डबल-क्लिक करें और पाठ सामग्री को प्रतिस्थापित करें - - निम्नलिखित के साथ:cat

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

अपनी मर्जी से कहीं भी सेव करें।

इस एप्लिकेशन के आइकन को बदलने के लिए, अपने वास्तविक Google Chrome पर जानकारी प्राप्त करें, ऊपर बाईं ओर स्थित आइकन पर क्लिक करें Cmd-C, अपने Chrome Automator ऐप पर Get Info , आइकन पर क्लिक करें और दबाएं Cmd-V

चूंकि यह एक अलग अनुप्रयोग है, डॉक दो क्रोम अनुप्रयोगों को प्रदर्शित करेगा जब यह चल रहा है: क्रोम, और आपका क्रोम लांचर।


विकल्प 2 : एक स्क्रिप्ट लॉन्च करने के लिए अपने एप्लिकेशन बंडल को संपादित करें। यह स्क्रिप्ट कमांड लाइन के तर्क को जोड़ते हुए वास्तविक एप्लिकेशन को शुरू करेगी।

राइट-क्लिक करें Google Chrome.appऔर दिखाएँ पैकेज सामग्री का चयन करें । पर जाएं Contents/और खोलने Info.plistमें संपत्ति सूची संपादक / Xcode (एप्पल के डेवलपर उपकरण), या किसी तीसरे पक्ष के plistसंपादक।

प्रविष्टि के लिए देखो CFBundleExecutableया Executable File। इसका मूल्य याद रखें (जैसे firefox-binफ़ायरफ़ॉक्स के लिए)। इसे बदलें parameterized-app.sh

टर्मिनल खोलें और निम्नलिखित दर्ज करें:

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

.shफ़ाइल के लिए एक संपादक खुल जाएगा। फ़ाइल की सामग्री यहां सेट करें:

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

( Info.plistइच्छित कमांड-लाइन आर्ग्युमेंट्स को जोड़कर आपके द्वारा हटाए गए वास्तविक निष्पादन योग्य नाम का उपयोग करते हुए )

सहेजें और बंद करें। टर्मिनल में, निम्नलिखित दर्ज करें:

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

अब, टर्मिनल को बंद करें और अपने एप्लिकेशन (जो अभी नहीं चल रहा होगा) को एक अलग फ़ोल्डर में ले जाएं और फिर से वापस करें। यह लॉन्च सेवाओं को अपडेट करेगा , अन्यथा आपके परिवर्तनों को अनदेखा किया जाएगा और आपको बेहद परेशान करेगा।

अब, जब आप अपना आवेदन खोलते हैं, तो यह वास्तव में .shफ़ाइल को निष्पादित करेगा , जो वास्तविक निष्पादन योग्य फ़ाइल को चालू करेगा, कमांड लाइन आर्ग्स भेज रहा है।

यह आपके द्वारा अपेक्षित की तरह दिखेगा और व्यवहार करेगा, लेकिन जब भी आप अपना एप्लिकेशन अपडेट करेंगे, तो आपको इसे दोहराना होगा, क्योंकि यह आमतौर पर एप्लिकेशन बंडल और आपके द्वारा किए गए सभी परिवर्तनों को बदल देगा।


किसी कारण से, मेरा Chrome 10 कमांड लाइन तर्क और पिछले सत्र में पिन किए गए टैब को ऑटो-पिन करता है। पता नहीं यहाँ क्या गलत है, क्योंकि मैं एक क्रोम उपयोगकर्ता नहीं हूँ और यह नहीं जानता कि यह कैसे व्यवहार करना चाहिए।
डैनियल बेक

6
"अपने एप्लिकेशन को एक अलग फ़ोल्डर में ले जाएं और फिर से वापस जाएं" बोल्ड होना चाहिए - पहली बार पढ़ने पर पूरी तरह से छूट गया :)
स्टेफ़नोस

1
क्या शेल सेवाओं के माध्यम से लॉन्च सेवाओं को अपडेट / रीसेट / पुनः आरंभ करने का एक तरीका है ताकि आपको एप्लिकेशन को फिर से स्थानांतरित न करना पड़े? इतना आसान है कि कदम आसानी से है?
जॉर्डन ब्रॉट

1
@ जोर्डन बो्रट आप लॉन्चसर्विस अपडेट को बाध्य करने के लिए लेस्गीस्टर यूटिलिटी का उपयोग कर सकते हैं:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
रॉस

1
बेशक, विकल्प 2 केवल गैर-कोडसाइन ऐप पर काम करता है। यदि यह ऐप्पल या ऐप स्टोर से आता है, तो यह परिवर्तनों के खिलाफ हस्ताक्षरित है। यहां तक ​​कि Info.plist में परिवर्तन भी इसे रोक देगा। उस स्थिति में, एक सरल ठूंठ / आवरण ऐप मदद करेगा।
cd

10

आप एक स्क्रिप्ट लिख सकते हैं जो Chrome लॉन्च करती है, लेकिन वह डॉक में एप्लिकेशन आइकन नहीं होगी, और इससे एक अलग क्रोम आइकन दिखाई देगा। तो आपको एक एप्लीकेशन पैकेज बनाना होगा।

सबसे पहले अपने क्रोम ऐप की एक कॉपी बनाएं। फिर, दो दृष्टिकोण हैं जो काम कर सकते हैं; मुझे यकीन नहीं है कि जो मैक ओएस एक्स और / या क्रोम के आत्म-अद्यतन के साथ बेहतर खेलेंगे।

  1. एक 'लॉन्चर' बनाएं, जो सिर्फ क्रोम को तर्कों के साथ कहता है।

    • एप्लिकेशन पैकेज खोलें (खोजकर्ता में राइट-क्लिक करें → पैकेज सामग्री दिखाएं), और Info.plist, PkgInfo, और MacOS सब कुछ बाहर फेंक दें।
    • MacOS फ़ोल्डर में, "Google Chrome" निष्पादन योग्य को हटा दें और इसे शेल स्क्रिप्ट से बदल दें जो वास्तविक क्रोम कहलाती है:

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

      chmod +xस्क्रिप्ट को मत भूलना ।
       

  2. आपके द्वारा चलाए जा रहे Chrome पैकेज को संशोधित करें।

    • MacOS फ़ोल्डर में, "Google Chrome" का नाम बदलें और एक शेल स्क्रिप्ट लिखें, जो अतिरिक्त तर्कों के साथ वास्तविक चीज़ को आमंत्रित करती है:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • मुझे लगता है कि Chrome पैकेज में कोड साइनिंग के बारे में कुछ है; आपको इन परिवर्तनों को चलाने के लिए CodeResourcesऔर / या _CodeSignatureइसे हटाने की आवश्यकता हो सकती है ।

यह सब मैक ऐप पैकेज की मेरी समझ पर आधारित है; मैंने वास्तव में क्रोम पर इन परिवर्तनों का विशेष रूप से परीक्षण नहीं किया है। यह भी देखने योग्य है कि मैक पर क्रोम निष्पादन योग्य इस विकल्प का समर्थन नहीं करता है, क्योंकि मैक अनुप्रयोगों को आमतौर पर नियंत्रणीय कमांड-लाइन विकल्पों के साथ चलने की उम्मीद नहीं की जाती है (उदाहरण के लिए, विंडोज, जहां एप्लिकेशन शॉर्टकट के माध्यम से सामान्य रूप से लॉन्च किए जाते हैं जो कर सकते हैं एम्बेडेड विकल्प हैं)।


Chrome समर्थन पैरामीटर, मैं सिर्फ आपके निर्देश # 2 का अनुसरण कर रहा हूं। आपको वास्तव में बाइनरी के लिए पूर्ण पथ निर्दिष्ट करने की आवश्यकता है, और chmod 755 Google\ Chromeआपके समाप्त होने के बाद (आपकी स्क्रिप्ट) को मत भूलना । मैंने वास्तव में अपनी स्क्रिप्ट का नाम लॉन्च कर दिया है। उन्होंने अपडेट के लिए Google \ Chrome को सिम्प्लाइड किया है।
ऑरवेलोफाइल

ध्यान दें कि पैकेज की सामग्री को संशोधित करने से कोड हस्ताक्षर करने में समस्या होती है, जिसके परिणामस्वरूप विषम समस्याएं ठीक से काम नहीं कर रही हैं जैसे: Bridge.grumpy-troll.org/2011/01/…
drevicko
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.