shell - Pipe a script into bash? -


क्या इसमें कोई अंतर है:

  $ bash ~ / script.sh   

और: <पूर्व> $ cat ~ / script.sh | Bash

वे थोड़ा अलग तरीके से व्यवहार करने लगते हैं, और मैं यह नहीं समझ सकता कि क्या हो रहा है। मेरा script.sh में कई लाइनें होती हैं, लेकिन ऐसा लगता है कि जब मैं पाश को बाश में पाइप करता हूँ (लेकिन जब मैं स्क्रिप्ट को सीधे चलाता हूँ तो पूरा करता है)।

क्या है इन दोनों तरीकों से स्क्रिप्ट चलाने में क्या अंतर है?

इसके अलावा, जब मैं & lt; का उपयोग करता हूं, तो व्यवहार पहले उदाहरण के समान है (पूरा होने पर चलता है):

  bash & lt; (~ / script.sh)   

स्क्रिप्ट

  सेट -यूके एसएसएच की तर्ज पर है CLUSTER_0_SERVER_0 "do_something" || एसएच CLUSTER_0_SERVER_1 "do_something" ssh CLUSTER_1_SERVER_0 "do_something" || Ssh CLUSTER_1_SERVER_1 "do_something"  

एक ही स्क्रिप्ट चलाने के आपके तरीके सभी में अलग हैं < मजबूत> शब्दों

उदाहरण के लिए इस सरल स्क्रिप्ट देखें:

  #! / Bin / bash इको $$ ssh 127.0.0.1 प्रतिध्वनि $$   

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

इसे बिल्ली के माध्यम से चलाना। / Script.sh | Bash शुरुआत में दो अलग-अलग प्रक्रियाएं बनाता है: एक बिल्ली करने के लिए और एक bash के लिए हालांकि, जब बैश इंटरप्रिटर ssh कमांड को पढ़ता है और निष्पादित करता है तो आपको एक त्रुटि मिलती है (यदि ssh इसे छापने के लिए कॉन्फ़िगर नहीं है):

  छद्म टर्मिनल आवंटित नहीं किया जा सकता क्योंकि stdin टर्मिनल नहीं है   

और फिर आपको मशीन पर एक लॉगिन मिलता है और इसे तुरंत छोड़ दिया जाता है, वर्तमान प्रक्रिया को मारने इस प्रकार, दूसरा मान एक अलग पीआईडी ​​है। आपके मामले में, आपके पास एक सशर्त ऑपरेटर द्वारा लिखे गए दो ssh आदेश हैं। हालांकि, पहले एक के बाद के बाद दुभाषिया को मार दिया गया है, कोई दूसरा रास्ता नहीं है। यही कारण है कि आपको केवल * _ SERVER_0 ssh निष्पादित आदेश मिलेगा।

तीसरा मामला केवल गलती से काम करता है & lt; (cmd) निर्माण का मतलब है सीएमडी को निष्पादित करना और कॉलर को फ़ाइल तर्क के रूप में इसके आउटपुट को पास करना। आपके मामले में, स्क्रिप्ट कुछ भी प्रिंट नहीं करता है, इसलिए आपको कोई त्रुटि नहीं दिखाई दे रही है उदाहरण स्क्रिप्ट चलाना आपको ऐसी त्रुटियां मिलेंगी:

  / dev / fd / 63: पंक्ति 1: 29355: कमांड नहीं मिली   

चौथा मामला (टिप्पणियों में सुझाव दिया गया है) bash & lt; स्क्रिप्ट केवल बिल्ली स्क्रिप्ट के समान है | Bash

Bash स्क्रिप्ट को चलाने के लिए उचित तरीका bash script या । / Script और शेबांग)। यदि आप उसी प्रक्रिया में निर्देशों को चलाने के लिए चाहते हैं तो आप का उपयोग भी कर सकते हैं स्क्रिप्ट ( स्रोत ) कुछ अन्य भाग्यशाली दुष्प्रभावों के आधार पर अन्य सभी कार्य कर सकते हैं या नहीं, (सामान्य तौर पर उन्हें काम नहीं करना चाहिए)।

Comments

Popular posts from this blog

Java - Error: no suitable method found for add(int, java.lang.String) -

java - JPA TypedQuery: Parameter value element did not match expected type -

c++ - static template member variable has internal linkage but is not defined -