नॉन-ब्लॉकिंग बैश कमांड


11

मान लीजिए कि मेरे पास निम्नलिखित के साथ एक बैश स्क्रिप्ट है:

#!/bin/sh
gedit
rm *.temp

जब मैं इसका उपयोग करते हुए निष्पादित करता हूं sh ./test.sh, तो geditपॉप-अप होता है लेकिन rmजब तक मैं बंद नहीं करता तब तक भाग नहीं चलता है gedit

मैं चाहता हूं कि स्क्रिप्ट geditबंद न होने पर भी चलती रहे ; जैसे geditबैश निष्पादन को रोक नहीं रहा है।

मैंने जो उदाहरण दिया, वह केवल एक उदाहरण है ( rmपहली बार वास्तविक स्थिति में काम नहीं करेगा)।

जवाबों:


25

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

#!/bin/sh
gedit &
rm ./*.temp

इस तरह से, खोल की समाप्ति के लिए इंतजार नहीं कर रहा है geditऔर दोनों rmऔर geditसमवर्ती चलेंगे।

शब्द "ब्लॉकिंग" आमतौर पर इनपुट / आउटपुट स्ट्रीम के साथ होता है, अक्सर फ़ाइलों या डिवाइस के लिए। यह संकलित भाषाओं में भी आपके द्वारा उपयोग की जाने वाली भावना के समान है, लेकिन बैश और समान शेल स्क्रिप्टिंग में, टर्मिनेशन (और फ़ंक्शन!) अलग है।


धन्यवाद! यह समझाएं कि मुझे केवल Google पर ही तारीख और इनपुट परिणाम क्यों मिल रहे थे: D
प्लांट

मेरी धारणा है, कि प्लांटे बाहर से एक स्क्रिप्ट को प्रभावित करना चाहता है, पृष्ठभूमि में प्रत्येक ऑपरेशन करना, स्क्रिप्ट को फिर से लिखना नहीं।
उपयोगकर्ता अज्ञात

@user: यह मुझे लगता है कि वह क्या चाहता था अनुमान लगाने के लिए भी पढ़ता है। हो सकता है कि आप स्पष्टीकरण के लिए सवाल पर टिप्पणी कर सकते हैं।
कालेब

ठीक वैसा ही, जिसकी मुझे जरूरत थी, फिर से धन्यवाद। अब तक महान काम करता है!
प्लांट जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.