सीमित समय के लिए बैश में कमांड की कोशिश करना


0

फ़ंक्शन में एक कमांड को फिर से प्राप्त करना चाहता था। परीक्षण के लिए मैंने गलत कमांड ( lsss) लिखी है । इसे 5 बार के लिए प्रयास करना चाहिए और असफल होना चाहिए, लेकिन यह अनंत लूप में फंस गया।

#!/bin/bash

RETRY () {

        Attempt=0
        Max_Attempts=5
        CMD=$1
        while [ $Attempt -lt $Max_Attempts ]
        do
            $CMD

        if [ $? -eq 0 ]; then
           echo "succeeded on Attempt $Attempt" >> /tmp/err.txt
            break
        else
                 Attempt=$( expr $Attempt + 1 )
        echo  "Command failed. Attempting  $Attempt/$Max_Attempts" >> /tmp/err.txt
                 sleep 2
        fi
done

}

LIST () {

        lsss  # COMMAND WRITTEN WRONGLY FOR TESTING

        if [ $? -eq 0 ]; then
         echo "SUCCESS" 
        else
        RETRY LIST

        echo "FAILED" 
        fi
}
LIST

कृपया अपने कोड को ठीक से इंडेंट करें।
जी-मैन

जवाबों:


0

आपके "प्रश्न" में कोई प्रश्न नहीं है। मुझे लगता है कि सवाल "क्यों?" है।

जब भी LISTचलाया जाता है, lsssविफल होता है, इसलिए RETRY LISTचालान किया जाता है। तब (भीतर से RETRY) LIST(अ $CMD) फिर से चलाया जाता है और हम शुरू से समझा सकते हैं।

बैश $CMDअंदर कभी नहीं जाता है RETRY। आपके दो कार्य एक दूसरे को कहते हैं, वे अधिक से अधिक स्टैक करते हैं; उनमें से कोई भी वास्तव में बाहर नहीं निकलता है।


मुझे लगता है कि आपका पूरा दृष्टिकोण त्रुटिपूर्ण है। मुझे नहीं पता कि इसका सटीक उद्देश्य क्या है लेकिन "सीमित समय के लिए एक कमांड का प्रयास करें", यह आपका शुरुआती बिंदु हो सकता है:

(max=5; for n in `seq 1 $max`; do your_command && break; done)

$maxवर्तमान शेल से बाहर रखने के लिए एक सबशेल का उपयोग किया जाता है । ध्यान दें कि पूरा कमांड काफी समझदार निकास कोड देता है।


RETRY में मैं $ CMD कैसे पास करूंगा?
zim

@zim LIST(के अंदर से लागू RETRYके रूप में $CMD) पर लौटना चाहिए, उसके बाद ही बैश परे जारी रहेगा $CMDलाइन। लेकिन दूसरे कोLIST आमंत्रित करता है और उसके लौटने का RETRYइंतजार करता है । यह एक और आह्वान करता है । मुझे लगता है कि आपका पूरा दृष्टिकोण त्रुटिपूर्ण है। RETRY LIST
कामिल मैकियोरोस्की

मैं समझ गया। यह काम किया, लेकिन क्या हम स्क्रिप्ट को संशोधित कर सकते हैं ताकि हम RETRY फ़ंक्शन का उपयोग कर सकें।
zim

@ ज़िम हम न स्क्रिप्ट राइटिंग सर्विस हैं और न ही फ़ोरम, यह क्यू एंड ए साइट है। आपने अपने "प्रश्न" के शरीर में एक प्रश्न भी नहीं पूछा है; मुझे अनुमान लगाना पड़ा। एक फ़ंक्शन के रूप में आपको मेरी "शुरुआती बिंदु" लिखने से क्या रहता है? यदि आप इसके साथ कुछ विशिष्ट समस्या का सामना करते हैं, तो आप एक और प्रश्न पूछ सकते हैं। लेकिन पहले अपना शोध करो, कुछ शोध प्रयास दिखाओ।
कामिल मैकियोरोस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.