यूनिक्स स्क्रिप्ट: एक फ़ाइल मौजूद होने तक प्रतीक्षा करें


13

मुझे ऐसी स्क्रिप्ट की आवश्यकता है जो / (tmp निर्देशिका) में प्रदर्शित होने के लिए (examplefile.txt) प्रतीक्षा करेगी

और एक बार यह प्रोग्राम को रोकने के लिए मिल जाता है, अन्यथा फ़ाइल को तब तक सोते रहें जब तक कि वह स्थित न हो जाए

अब तक मेरे पास:

अगर [ ! -f /tmp/examplefile.txt]

फिर

जवाबों:


17

यह बैश फ़ंक्शन तब तक ब्लॉक होगा जब तक कि दी गई फ़ाइल प्रकट नहीं होती है या किसी दिए गए टाइमआउट तक नहीं पहुंचती है। यदि फ़ाइल मौजूद है, तो बाहर निकलने की स्थिति 0 होगी; यदि ऐसा नहीं होता है, तो बाहर निकलने की स्थिति दर्शाती है कि फ़ंक्शन ने कितने सेकंड इंतजार किया है।

wait_file() {
  local file="$1"; shift
  local wait_seconds="${1:-10}"; shift # 10 seconds as default timeout

  until test $((wait_seconds--)) -eq 0 -o -f "$file" ; do sleep 1; done

  ((++wait_seconds))
}

और यहां बताया गया है कि आप इसका उपयोग कैसे कर सकते हैं:

# Wait at most 5 seconds for the server.log file to appear

server_log=/var/log/jboss/server.log

wait_file "$server_log" 5 || {
  echo "JBoss log file missing after waiting for $? seconds: '$server_log'"
  exit 1
}

एक और उदाहरण:

# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
  echo "File found."
}

टाइमआउट की गणना करने का एक अधिक सटीक तरीका संभवतः होगा:start=`date +%s`; while (( `date +%s` - start > 10 )); do sleep 1; done
x-yuri

14
until [ -f /tmp/examplefile.txt ]
do
     sleep 5
done
echo "File found"
exit

हर 5 सेकंड में यह जाग जाएगा और फ़ाइल की तलाश करेगा। जब फ़ाइल दिखाई देती है, तो यह लूप से बाहर हो जाएगी, आपको बताएगा कि उसने फ़ाइल और निकास पाया (आवश्यक नहीं, लेकिन साफ ​​है।)

इसे स्क्रिप्ट में रखें और इसे स्क्रिप्ट के रूप में शुरू करें

वह इसे पृष्ठभूमि में चलाएगा।

आपके द्वारा उपयोग किए जाने वाले शेल के आधार पर सिंटैक्स में सूक्ष्म अंतर हो सकते हैं। लेकिन वह इसका सार है।

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