2010-12-13 4 views
7

आप कृपया समझा सकते हैं कि वास्तव में क्या इस की अंतिम पंक्ति है, और यही कारण है कि यह आवश्यक है?बैश स्क्रिप्ट: इसका क्या अर्थ है? "किया</ देव/बातिल और त्याग देते"

while true; do 
    /usr/bin/ssh -R 55555:localhost:22 -i ~/.ssh/tunnel-id [email protected] 
    sleep 1 
done < /dev/null & disown 

यह पूरी लिपि है, और इसका उद्देश्य एक रिले सर्वर पर एक एसएसएच सुरंग बनाना है। मैं बैश के लिए नया हूं, लेकिन ऐसा लगता है कि यह लगातार कनेक्शन को जीवंत रखने की कोशिश करेगा, लेकिन मुझे अंतिम पंक्ति के वाक्यविन्यास को समझ में नहीं आता है।

यह स्क्रिप्ट एक प्रक्रिया एक फ़ायरवॉल के पीछे SSH का उपयोग करने के लिए, या मेरे मामले एक नेट में का हिस्सा है: - जो तुरंत EOF रिटर्न - http://martin.piware.de/ssh/index.html

उत्तर

7

अंतिम पंक्ति इनपुट के रूप में लूप में /dev/null रीडायरेक्ट और पृष्ठभूमि में प्रक्रिया चलाता है। इसके बाद अग्रभूमि में disown (1) कमांड चलाता है, जो प्रक्रिया को अलग करता है, जिससे एचयूपी सिग्नल इसे रोकने से रोकता है (जैसे नोहुप करता है।)। प्रभाव लूप को डेमॉन प्रक्रिया की तरह कुछ बनाना है।

पाश समग्र एक दूसरे एक बार ssh आदेश चलाता है। आदेश एक एसएस सुरंग खोल रहा है, इसे स्थानीय रूप से पोर्ट 5555 से कनेक्ट कर रहा है और दूरस्थ रूप से बंदरगाह 22 (एसएसएच) तक कनेक्ट कर रहा है। अगर कनेक्ट करने के लिए कुछ है, तो यह करता है; अन्यथा पुनर्निर्देशित ईओएफ इसे समाप्त कर देता है। फिर यह एक दूसरे के बाद Aagain कोशिश करता है।

(या तो मुझे विश्वास है, मैं वास्तव में इसे करने की कोशिश नहीं की है।)

बैश में, अस्वीकार है एक अंतर्निहित; कुछ विवरण देखने के लिए help disown का उपयोग करें।

+0

कैसे आ यह आउटपुट "ssh: server.com बंदरगाह 22 की मेजबानी करने के लिए कनेक्ट: कार्रवाई की अनुमति नहीं", लेकिन जब मैं बाहर टिप्पणी "नींद 1" लाइन यह सामान्य रूप से काम करने लगता है। – drifter

+0

इसे पढ़ने वाले किसी के लिए, यह सिग्विन के साथ एक मुद्दा प्रतीत होता है क्योंकि यह मेरे लिनक्स डिस्ट्रो में नहीं होता है। – drifter

2

/dev/null की पुनर्निर्देशन while लूप में प्रभावी रूप से बंद कर देता है इसके stdin जो exec <&- के बराबर होना चाहिए।

+0

जब मैं इसे सिगविन में चलाता हूं, तो यह आउटपुट करता है "छद्म-टर्मिनल आवंटित नहीं किया जाएगा क्योंकि stdin टर्मिनल नहीं है।" मुझे लगता है कि यह सामान्य है। – drifter

+0

@drifter: मुझे विश्वास है। –

+0

धन्यवाद। मुझे एक और अजीब त्रुटि मिल रही है। यदि आप चार्ली मार्टिन के उत्तर पर पोस्ट की गई टिप्पणी को संदर्भित करना चाहते हैं, तो मैं इसकी सराहना करता हूं। – drifter

संबंधित मुद्दे