लिनक्स प्रवाह नियंत्रण विफलता पर टर्मिनल से बाहर निकलता है


0

मेरे पास प्रवाह नियंत्रण के साथ एक क्वेरी है। जब संदेश है: मैं स्क्रिप्ट से टर्मिनल से बाहर जाना चाहता हूं: HOSTNAME NOT ADDED IN /tmp/hosts EXITINGजो एक विफलता संदेश है।

if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts; then
  echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]; then
  echo " HOSTNAME NOT ADDED IN /tmp/hosts EXITING"; exit
fi|tee -a /tmp/log;

मैंने उपरोक्त स्क्रिप्ट की कोशिश की, लेकिन यह विफलता पर बाहर निकलने में विफल है। मैं यह कैसे तय करुं?

जवाबों:


0

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

इसे ठीक करने के कुछ तरीके हैं - शायद निम्नलिखित में से कुछ क्लीनर - लेकिन मुझे उनमें से किसी का परीक्षण करने के लिए इस समय एक * nix सिस्टम तक पहुंच नहीं है। एक सरल तरीका जो काम करना चाहिए वह एक ध्वज फ़ाइल का उपयोग करना है:

exit_flag_file="/tmp/my_exit.$$"
rm –f "$exit_flag_file"
if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts
then
    echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]
then
    echo " HOSTNAME NOT ADDED IN /tmp/hosts; EXITING"
    > "$exit_flag_file"
fi | tee -a /tmp/log
if [ -f "$exit_flag_file" ]
then
    exit
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.