क्या "प्रतीक्षा और" ("प्रतीक्षा करें प्रतिरूप") एक उपयोगी (बैश) शेल / शेल स्क्रिप्ट मुहावरा या तकनीक है?


12

मैंने जीएनयू "बैश" शेल चलाने वाली लिनक्स मशीनों के लिए "कुछ विरासत" प्राप्त की है। एक विशेष मामले में, मशीन GNU बैश संस्करण 2.0.5b चलाता है

उन लिपियों में wait &से एक forलूप के "लाइन के लिए" के भाग के रूप में "(प्रतीक्षा एम्परसेंड") निर्देश है । पहली नजर में, यह एक जिज्ञासु / दिलचस्प मुहावरा लगता है, लेकिन इसके लिए मेरी वेब खोजों ने कुछ भी प्रासंगिक नहीं लौटाया। man wait"BASH_BUILTINS" ("BASH BUILTINS COMMAND") मैनपेज दिखाता है, जिसमें निम्नलिखित विवरण हैं:

wait [n]  
  Wait for the specified process and return its termination status.
  n may be a process ID or a job spec­ification;  if  a  job spec is given,
  all processes in that job's pipeline are waited for.  If n is not
  given, all currently active child processes are waited for, and the 
  return status is zero. If n speci­fies a non-existent process or job, 
  the return status is 127.  Otherwise, the return status is the exit 
  status of the last process or job waited for.

इस मैनपेज के उस हिस्से को पढ़कर, यह मुझे लगता है कि wait &चुपचाप (पृष्ठभूमि में) यह सुनिश्चित कर रहा है कि " वर्तमान में सभी सक्रिय बाल प्रक्रियाओं का इंतजार किया जा रहा है, और वापसी की स्थिति शून्य है ।" क्या मैं इस व्याख्या में सही हूं? क्या यह एक सामान्य और / या उपयोगी मुहावरा है?

अतिरिक्त संदर्भ के लिए, मैं स्क्रिप्ट में निम्न प्रकार के उपयोग के बारे में बात कर रहा हूं:

for file in `ls *.txt ; wait &`
do
   ...
   [cp instructions]
   ...
   [mv instructions]
   ...
   [mailx instruction]
done

जवाबों:


14

मैं इस कोड को लिखने के किसी भी कारण की कल्पना नहीं कर सकता हूं, और मुझे पूरा यकीन नहीं है कि इस कोड को लिखने वाला व्यक्ति क्या हासिल करना चाहता था। waitयहाँ कुछ नहीं करता है - अपने नजरिए से, वहाँ रहे हैं , कोई भी बच्चा प्रक्रियाओं तो यह सिर्फ तुरंत बाहर निकल जाएगा और मूल रूप से एक NOOP (के रूप में कार्य waitही आदेश प्रतिस्थापन की वजह से एक बच्चे की प्रक्रिया में कार्यान्वित करता है, लेकिन यह है कि संबंधित न हो)।

एक तरफ के रूप में, एल एस के उत्पादन पार्सिंग काफी नाजुक है । इसके बजाय, बस ऐसा करने पर विचार करें:

for file in *.txt; do
    ...
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.