शेल स्क्रिप्ट लाइन के अंत में एम्परसेंड का क्या अर्थ है?


118
sh sys-snap.sh &

क्या है sh? क्या है sys-snap.sh? मुझे &पंक्ति के अंत में क्यों रखा जाना चाहिए ? क्या कोई वाक्यविन्यास समझा सकता है?

&स्क्रिप्ट के बिना मैं प्रेस करने के लिए वापस नहीं जाऊँगा जब तक कि मैं Ctrl+ दबाऊँ C। के साथ &मैं प्रवेश दबा सकते हैं और यह काम करता है।


2
क्या डबल एम्परसेंड &&एक एम्परसेंड से अलग है &?
चार्ली पार्कर

1
@CharlieParker क्या आपने कभी इसका जवाब पाया है? मैं खुद अंतर जानने की कोशिश कर रहा हूं। (संपादित करें: नेवरमाइंड, इसे और नीचे पाया)
द्राज़ेन बेज़ेलोवुक

जवाबों:


94

shडिफ़ॉल्ट बॉर्न-संगत शेल (आमतौर पर बैश या डैश) है

sys-snap.shएक शेल स्क्रिप्ट है, जिसमें कमांड होते हैं जो shनिष्पादित करते हैं। जैसा कि आप इसकी सामग्री को पोस्ट नहीं करते हैं, मैं केवल इसके नाम से अनुमान लगा सकता हूं कि यह क्या करता है। मैं एक ही फ़ाइल नाम के साथ CPanel से संबंधित एक स्क्रिप्ट पा सकता हूं, जो सभी वर्तमान प्रक्रियाओं, वर्तमान मेमोरी उपयोग, डेटाबेस स्थिति आदि के साथ एक लॉग फ़ाइल बनाता है। यदि स्क्रिप्ट एक शेल्ग लाइन ( #!/bin/shया इसी तरह) से शुरू होती है , तो आप इसे निष्पादन योग्य बना सकते हैं। साथ chmod +x sys-snap.shऔर इसे सीधे का उपयोग करके शुरू ./sys-snap.shअगर यह मौजूदा निर्देशिका में है।

साथ &प्रक्रिया पृष्ठभूमि में शुरू होता है, तो आप खोल उपयोग करने के लिए जारी रख सकते हैं और जब तक स्क्रिप्ट समाप्त हो गया है प्रतीक्षा करने के लिए नहीं है। यदि आप इसे भूल जाते हैं, तो आप वर्तमान में चल रही प्रक्रिया को रोक सकते हैं Ctrl-Zऔर इसे पृष्ठभूमि में जारी रख सकते हैं bg(या अग्रभूमि में fg)। अधिक जानकारी के लिए, नौकरी नियंत्रण देखें


4
shआमतौर पर केवल bashया dashलिनक्स आधारित प्रणालियों (या हाल ही में ओएस / एक्स) में। बीएसडी पर, यह आमतौर पर ऐश का एक और संस्करण है (डैश नेटबीडी श पर आधारित है, खुद अल्मक्विस्ट शेल पर आधारित है) या पीडीएक्स व्युत्पन्न है। वाणिज्यिक यूनियनों पर, यह आम तौर पर ksh88 है।
स्टीफन चेजलस

1
@jofel: क्या होगा अगर नीचे की स्क्रिप्ट चल रही है और गलती से मैंने Ctrl-C निष्पादित कर दिया है। क्या मेरी स्क्रिप्ट निष्पादित होगी या इसे समाप्त कर दिया जाएगा? Ex: sh sys-snap.sh &
हुसैन 7

2
@ हुसैन 7 Ctrl-C हमेशा अग्रभूमि में वर्तमान प्रक्रिया को भेजा जाता है। यदि शेल-स्क्रिप्ट के साथ शुरू किया गया है &और इसलिए पृष्ठभूमि में, आपको केवल एक नया शेल प्रॉम्प्ट मिलता है।
jofel

2
क्या डबल एम्परसेंड &&एक एम्परसेंड से अलग है &?
चार्ली पार्कर

7
@CharlieParker हाँ, "&&" "और" फ़ंक्शन है। && के बाद कमांड को केवल तभी कहा जाता है जब कमांड सफल होने से पहले। उदाहरण "सच्चा और गूंज काम करता है" आउटपुट "काम करता है, लेकिन" झूठा और गूंज कोई आउटपुट नहीं "गूंज फ़ंक्शन को कॉल नहीं करता है।
जोफेल

87

इसे job controlयूनिक्स के तहत जाना जाता है । &पृष्ठभूमि में आदेश डाल करने के लिए खोल सूचित। इसका मतलब है कि यह sys-snap.shकमांड को चलाना जारी रखता है, लेकिन आपको अपने शेल पर लौटाता है ताकि आप समानांतर कमांड को जारी रख सकें ।

आप वर्तमान में jobsकमांड के साथ चल रही नौकरियों की सूची देख सकते हैं । आप कमांड का उपयोग करने के साथ कमांड ('अग्रभूमि में) ला सकते हैं fg। कौन सा आदेश वापस राज्य है जहां आप कोई शीघ्र देखने के लिए खींचती है और आप जारी करने के लिए है Ctrl- Cकरने के लिए को मारने की प्रक्रिया। आप फिर भी कर सकते हैं निलंबित (विराम) है कि इस प्रक्रिया, जारी करने Ctrl- Z। यह आपको विराम देगा sys-snap.shऔर आपको आपके शीघ्र लौटा देगा । इसके बाद आप पृष्ठभूमि यह (जैसे कि आप इसे जारी किया है सकते हैं के साथ& ) के साथ bgआदेश, और यह होगा फिर से शुरू से चल रहा है में रुके हुए राज्य Ctrl- Zमें रख दिया था।

ध्यान दें कि आपके पास एक समय में एक से अधिक काम हो सकते हैं (जैसा कि दिखाया गया है jobs):

[1]-  Running          sys-snap.sh &
[2]+  Running          another-script.sh &

आप उनके जॉब नंबर का उपयोग करके उन्हें पृष्ठभूमि और अग्रभूमि कर सकते हैं, %1होगा sys-snap.shऔर %2रहेगा another-script.sh। यदि आप उपयोग करते हैं fgया bgतर्क के बिना यह ऊपर +के jobsआउटपुट में चिह्नित कार्य पर कमांड को क्रिया करेगा ।

fg %1

पृष्ठभूमि में sys-snap.shछोड़ते हुए, अग्रभूमि में वापस रखा जाएगा another-script.sh

आप Ctrl- आदेश को Cउनके साथ अग्रभूमि किए बिना चलने वाली नौकरियों के लिए अनुक्रम जारी कर सकते हैं kill, kill %1के बराबर भेज देंगे Ctrl- Cको sys-snap.sh

यदि आप बैश शेल का उपयोग कर रहे हैं, तो man bashकमांड में एक विस्तृत खंड है, जिसमें 'JOB CONTROL' के सेक्शन में अधिक विवरण है।

के नाम के रूप में sys-snap.sh, यूनिक्स फ़ाइल के तहत नाम मनमाने ढंग से (गतिशील लोडर फ़ाइलों की तरह अपवादों के एक जोड़े के साथ) हैं। उन्हें शेल स्क्रिप्ट के रूप में चलाने के लिए विशिष्ट फ़ाइल सीमाएँ रखने की कोई आवश्यकता नहीं है, अन्य आदेश जैसे कि perlया phpआदि का उपयोग करें। यह आमतौर पर स्पष्टता प्रदान करने के लिए उपयोग किया जाता है, इस उदाहरण में, यह .shबॉर्न शेल का उपयोग करके एक शेल स्क्रिप्ट है /bin/sh

का कार्यात्मक हिस्सा sys-snap.sh(जब आप इसे कुछ lessकमांड जैसी सामग्री के साथ देखते हैं ) शेबंग है । पहली पंक्ति पर आपको संभवतः निम्नलिखित में से एक मिलेगा:

#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash

या इसी के समान। बुनियादी शब्दों में, #!(जैसे /bin/sh) के बाद एक कमांड चलाया जाता है और बाकी स्क्रिप्ट फ़ाइल की सामग्री को एक समय में एक पंक्ति में खिलाया जाता है। ध्यान दें कि फ़ाइल को निष्पादन योग्य भी सेट किया जाना चाहिए chmodताकि आप इसे कमांड के रूप में चला सकें। यदि अनुमतियाँ सेट नहीं थीं, तो shebangइसका कोई प्रभाव नहीं है, क्योंकि आपको या तो त्रुटि मिलेगी:

bash: sys-snap.sh: command not found

या यदि आप इसे स्पष्ट मार्ग से चलाते हैं ./sys-snap.sh( .जिसका अर्थ है कि वर्तमान कार्यशील निर्देशिका) तो आपको मिलेगा:

bash: ./sys-snap.sh: Permission denied

अन्य विकल्प इसे अनुमतियों को निष्पादित किए बिना छोड़ने के लिए है और इसे चलाने के लिए स्पष्ट रूप से पूछें / बिन / श:

/bin/sh sys-snap.sh &

3
यह एक महान जवाब है। एक संभावित सुझाव यह भी है कि nohupइसमें क्या जोड़ा जाता है, क्योंकि इसका उपयोग अक्सर &प्रक्रिया शुरू करने और प्रक्रिया को मारने के बिना लॉन्च किए गए शेल को मारने में सक्षम होता है।
टॉमी

@ द्रविड़, क्या यह सच है कि jobsहमेशा खाली वापस आएगा अगर इसकी पहली कमान?
पचेरियर

ध्यान दें कि &एक कमांड के अंत में उपयोग करने से केवल stdin(लेकिन stdoutया नहीं stderr) अलग हो जाता है, जिसका अर्थ है कि यदि आपकी कमांड / स्क्रिप्ट पृष्ठभूमि में चल रही है, लेकिन लिखने के लिए stdout, आप ऐसी स्थिति में दौड़ सकते हैं जहां Ctrl + cआउटपुट बंद नहीं होगा लेकिन आप सक्षम होंगे कमांड में टाइप करने के लिए। ऐसा इसलिए है क्योंकि पृष्ठभूमि प्रक्रिया लिख ​​रही है, stdoutलेकिन आप इसे रोक नहीं सकते क्योंकि यह अग्रभूमि में नहीं चल रहा है। अधिक जानकारी यहाँ
वदसंबर

4

shएक खोल है। कौन सा शेल बिल्कुल सिस्टम पर निर्भर करता है। ऐसी प्रणाली के लिए उदाहरण जो bashअपने मानक शेल के रूप में उपयोग करती है :

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 13 16:12 /bin/sh -> bash

$ sh --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)

sys-snap.shकिसी प्रकार की एक शेल स्क्रिप्ट sh sys-snap.shहोगी , इसलिए शेल स्क्रिप्ट को निष्पादित करेगा।

&पृष्ठभूमि में चलाने के लिए शेल प्रक्रिया का कारण होगा। इसके बिना &स्क्रिप्ट समाप्त होने तक अग्रभूमि में रहेगा। स्क्रिप्ट किसी भी तरह से काम करेगी, यह आगे की कमांड को निष्पादित करने से पहले स्क्रिप्ट के खत्म होने या न होने का इंतजार करने का सवाल है।


1

Hostgator में आपका सर्वर है?

स्क्रिप्ट sys-snap.shएक विशेष स्क्रिप्ट है जो होस्टगेटर टीम द्वारा सिस्टम के लिए सभी लॉग फ़ाइलों और डेटा को इकट्ठा करने के लिए लिखी जाती है, इसलिए वे सिस्टम जानकारी की निगरानी और संग्रह में इसके आउटपुट का उपयोग करते हैं।


नहीं, मैं hostgator का उपयोग नहीं कर रहा हूँ।
user4951

1
@ J.Chang स्क्रिप्ट cPanel का हिस्सा है जिसे Hostgator और सैकड़ों अन्य होस्ट उपयोग करते हैं।
४'२० 5४

@ 472084, कौन सा cpanel संस्करण?
पचेरियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.