लॉगिन मैक पर स्क्रिप्ट चलाना [बंद]


280

मैं सोच रहा था कि क्या कोई मेरे कंप्यूटर पर मेरे खाते में लॉग इन करने के लिए .sh फ़ाइल को चलाने के लिए मेरी मदद कर सकता है। मैं मैक ओएस एक्स 10.6.7 चला रहा हूं।

मेरे पास एक फ़ाइल "Example.sh" है जिसे मैं अपने कंप्यूटर पर लॉग ऑन करते समय चलाना चाहता हूं। जब मुझे पहले से लॉग इन किया जाता है तो मुझे इसे चलाने में कोई समस्या नहीं है, लेकिन मैं चाहता हूं कि यह स्वचालित रूप से चले।

लोग इसे लॉगिन शेल फ़ाइल में जोड़ने के लिए कह रहे हैं, लेकिन मुझे नहीं पता कि वह कहां है। कृपया कुछ मदद करें।


3
यह ऑफ-टॉपिक नहीं है ... मुझे अपने Emacs डेमन को शुरू करने के लिए इसकी आवश्यकता थी;) BTW सबसे अच्छा जवाब है लिंगो X ऐप।
HappyFace

1
मुझे परवाह नहीं है अगर यह बंद विषय है। यह इंटरनेट पर मुझे मिला सबसे अच्छा जवाब है और यह सम्मान का हकदार है। मैंने इसे दूसरों के लिए अनदेखा कर दिया पहली बार एक समाधान की तलाश में और यह एक बड़ी गलती थी!
सेठम्र

जवाबों:


379

इसका पीछा करो:

  • शुरू Automator.app
  • चुनते हैं Application
  • Show libraryटूलबार में क्लिक करें (यदि छिपा हुआ है)
  • जोड़ें Run shell script(से Actions/Utilities)
  • अपनी स्क्रिप्ट को विंडो में कॉपी और पेस्ट करें
  • झसे आज़माओ
  • कहीं पर सहेजें (उदाहरण के लिए आप Applicationsअपने घर में एक फ़ोल्डर बना सकते हैं , आपको एक मिल जाएगा your_name.app)

  • जाना System Preferences-> Accounts->Login items

  • इस ऐप को जोड़ें
  • परीक्षण और किया;)

संपादित करें:

मैंने हाल ही में इस उत्तर के लिए "अच्छा जवाब" बैज अर्जित किया है। जबकि मेरा समाधान सरल और काम कर रहा है, लॉगिन समय पर किसी भी प्रोग्राम या शेल स्क्रिप्ट को चलाने का सबसे साफ तरीका @ trisweb के उत्तर में वर्णित है , जब तक कि आप अन्तरक्रियाशीलता नहीं चाहते

ऑटोमैटिक सॉल्यूशन से आप आगे की चीजें कर सकते हैं: automator स्क्रीनशॉट लॉगिन आवेदन

इसलिए, स्क्रिप्ट चलाने या एप्लिकेशन छोड़ने के लिए, पासवर्ड पूछते हुए, लॉगिन समय पर अन्य ऑटोमेकर वर्कफ़्लोज़ चलाने के लिए, सशर्त रूप से लॉगिन समय और इतने पर एप्लिकेशन चलाएं ...


2
@GregMiernicki LOL, सुप्रभात ...;) लगभग एक साल पहले मेरे जवाब में एक EDIT जोड़ा गया, जहाँ मैं भी बता रहा हूँ। लेकिन, औसत उपयोगकर्ताओं के लिए यह थोड़ा सरल है, क्योंकि XML (plist) फाइलें बनाना, कई उपयोगकर्ताओं के लिए बहुत उपयोगकर्ता के अनुकूल नहीं है। वैसे भी - एक टिप्पणी के लिए thanx। ;)
jm666

4
@GregMiernicki और मत भूलिए, ऑटोमेटर समाधान से आप इंटरेक्टिव लॉगिन-स्क्रिप्ट बना सकते हैं - उदाहरण के लिए एक स्क्रिप्ट जो आपसे कुछ प्रविष्टि के लिए पूछेगा (जैसे अतिरिक्त पासवर्ड या कुछ भी)। दुनिया केवल काली या सफेद नहीं है - कम से कम, यह एक ज़ेबरा की तरह है ... :) :)
jm666

2
@Cupidvogel लॉगिन समय पर एक डेमॉन चलाना बिल्कुल लॉन्च समाधान के लिए काम है - ट्रिसवेब का जवाब देखें। यदि आप एक अजगर डेमन का प्रबंधन कर सकते हैं, तो आप निश्चित रूप से एक प्लिस्ट कॉन्फिग फाइल का प्रबंधन कर सकते हैं, जहाँ आप पुनरारंभ के सभी पहलुओं को प्रबंधित कर सकते हैं ...
jm666

3
कुडोस अन्य उत्तर को सबसे साफ बताते हैं। कि एक अच्छी नागरिकता बैज मिलनी चाहिए :)।
५० पर जुगनू

2
अद्भुत जवाब। PATH = / usr / local / bin: $ PATH को स्क्रिप्ट की शुरुआत में निर्यात करें, यदि आप सिस्टम स्टार्टअप पर "कंपोजर ग्लोबल अपडेट" जैसी कमांड चलाना चाहते हैं।
लियोनार्डो

377

tl; डॉ: उपयोग OSX की मूल प्रक्रिया लांचर और प्रबंधक, launchd

ऐसा करने के लिए, एक launchctlडेमॉन बनाओ । स्क्रिप्ट के सभी पहलुओं पर आपका पूरा नियंत्रण होगा। आप एक बार दौड़ सकते हैं या डेमॉन के रूप में जीवित रह सकते हैं। ज्यादातर मामलों में, यह जाने का तरीका है।

  1. यहां Apple Dev डॉक्स में दिए निर्देशों के.plist अनुसार एक फाइल बनाएं या नीचे अधिक विवरण दें।
  2. रखना ~/Library/LaunchAgents
  3. लॉग इन करें (या मैन्युअल रूप से चलाएं launchctl load [filename.plist])

अधिक के लिए launchd, विकिपीडिया लेख काफी अच्छा है और अन्य पुराने सिस्टम पर सिस्टम और इसके लाभों का वर्णन करता है।


यहां लॉगिन पर स्क्रिप्ट चलाने के लिए विशिष्ट प्लिस्ट फ़ाइल है ।

OSX El Capitan और नए ( जोस मेसियस जूनियर के लिए क्रेडिट ) के लिए 2017/09/25 अपडेट किया गया :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>ProgramArguments</key>
   <array><string>/path/to/executable/script.sh</string></array>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

<string>अपने इच्छित कमांड के साथ प्रोग्राम कुंजी के बाद बदलें (ध्यान दें कि उस कमांड द्वारा संदर्भित किसी भी स्क्रिप्ट को निष्पादन योग्य होना चाहिए: chmod a+x /path/to/executable/script.shयह सुनिश्चित करने के लिए कि यह उनके उपयोगकर्ताओं के लिए है)।

के रूप रक्षित करें ~/Library/LaunchAgents/com.user.loginscript.plist

चलाने launchctl load ~/Library/LaunchAgents/com.user.loginscript.plistऔर लॉग आउट करने के लिए / परीक्षण करने के लिए (या सीधे परीक्षण करने के लिए, भागो launchctl start com.user.loginscript)

/var/log/system.logत्रुटि संदेशों के लिए पूंछ ।

कुंजी यह है कि यह एक उपयोगकर्ता-विशिष्ट लॉन्च प्रविष्टि है, इसलिए इसे दिए गए उपयोगकर्ता के लिए लॉगिन पर चलाया जाएगा। सिस्टम-विशिष्ट लॉन्च डेमन (इन में रखा गया /Library/LaunchDaemons) बूट पर चलाया जाता है।

यदि आप सभी उपयोगकर्ताओं के लिए लॉगिन पर एक स्क्रिप्ट चलाना चाहते हैं, तो मेरा मानना ​​है कि LoginHook आपका एकमात्र विकल्प है, और शायद यही कारण है कि यह मौजूद है।


4
हाँ। FWIW मैं एक ही तकनीक पर इस ब्लॉग को उपयोगी पाया: developernotes.com/archive/2011/04/06/169.aspx
डैनियल जेम्स

8
आप यह उल्लेख करने की उपेक्षा करते हैं कि ऑटोमेकर कार्यों के बारे में क्या संदिग्ध है, और वे 'अनुशंसित नहीं' क्यों हैं।
माइक कैंपबेल

4
: यहाँ फ़ोल्डर कार्यों launchctl बनाम के बारे में एक अच्छा अवलोकन है apple.stackexchange.com/a/63731/38290 (केवल एक स्क्रिप्ट की अनुमति दी) और LoginHook सीमाओं का एक और के बारे में एक - - superuser.com/a/377401 । यह वास्तव में नहीं है कि या तो एक संदिग्ध या खराब पद्धति है, लेकिन launchctlज्यादातर मामलों में बस बेहतर है, और आपको अपनी स्क्रिप्ट चलाने के सभी संभावित पहलुओं पर अधिक नियंत्रण देता है। यह "लॉन्च होने पर कम सक्षम विधि का उपयोग क्यों करें" के अर्थ में अधिक है? (नोट मैंने यह इंगित करने के लिए पहला वाक्य बदल दिया है कि मैं व्यक्तिगत रूप से इस स्थिति के लिए सिफारिश नहीं करता हूं )।
trisweb

3
आश्चर्य है कि जब आप उपयोगकर्ता लॉग-इन कर रहे हैं, तो आप लॉन्चडैम प्लेस्ट कैसे बनाएंगे ? । इसलिए, जब सिस्टम बूट नहीं होता है, लेकिन हर बार जब उपयोगकर्ता लॉग इन करता है (लॉगआउट-लॉगिन चक्र के साथ प्रयास करें)। क्या आप कृपया ठीक से दिखा सकते हैं (केवल bla-bla नहीं) कैसे लॉन्च के साथ उपरोक्त (आपके द्वारा गलत) ऑटोमेटर समाधान को लागू किया जाए?
कज्वीन

9
/ पुस्तकालय / LaunchAgents में Plist फ़ाइलें / लॉग इन उपयोगकर्ता की आईडी के साथ लॉगिन में चलाए जा रहे हैं। / पुस्तकालय / LaunchDaemons में प्लिस्ट फाइलें बूट समय पर रूट के रूप में चलाई जाती हैं (आईडी को उपयोगकर्ता कुंजी के साथ बदला जा सकता है )।
बैन

42
  1. अपना शेल स्क्रिप्ट login.shअपने $ HOME फ़ोल्डर में बनाएं ।

  2. स्क्रिप्ट संपादक में निम्न एक-लाइन स्क्रिप्ट पेस्ट करें:

    शेल स्क्रिप्ट "$ HOME / login.sh" करें

  3. फिर इसे एक एप्लिकेशन के रूप में सहेजें।

  4. अंत में अपने लॉगिन आइटम में एप्लिकेशन जोड़ें।

यदि आप स्क्रिप्ट आउटपुट दृश्य बनाना चाहते हैं, तो आप इसके लिए चरण 2 स्वैप कर सकते हैं:

tell application "Terminal"
  activate
  do script "$HOME/login.sh"
end tell

यदि कई आदेशों की आवश्यकता होती है तो इसका उपयोग किया जा सकता है:

tell application "Terminal"
  activate
  do script "cd $HOME"
  do script "./login.sh" in window 1
end tell

1
मैंने इसे एक जोड़ा, केवल एक चीज जो कमांड लाइन इंस्टॉलर को याद कर रही है;)
सोरिन

1
अच्छा समाधान है। मैं "लॉगिन" विंडो कैसे छिपा सकता हूं? मैंने लॉगिन आइटम में टिक करने की कोशिश की।
xgdgsc

1
@xgdgsc: गोटो Go to System Preferences -> Accounts -> Login itemsऔर इस एप्लिकेशन के लिए छिपाएँ बॉक्स की जाँच करें।
शुभ

1
@anubhava जैसा कि मैंने कहा, मैंने इस लॉगिन एप्लिकेशन के लिए पहले से ही छिपा हुआ बॉक्स चेक किया है। लेकिन यह अभी भी दिखाई देता है और कंप्यूटर को बंद करने पर छोड़ने के लिए मजबूर होने की आवश्यकता होती है।
xgdgsc

2
@ xgdgsc: ओह ठीक है, आपने ~/Library/LaunchAgentsफोल्डर चेक किया है ?
शुभ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.