ইউনিক্স স্ক্রিপ্ট: কোনও ফাইল উপস্থিত না হওয়া পর্যন্ত অপেক্ষা করুন


13

আমার কাছে এমন একটি স্ক্রিপ্ট দরকার যা / tmp ডিরেক্টরিতে প্রদর্শিত হতে একটি উদাহরণস্বরূপ (উদাহরণfile.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
হ'ল

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

প্রতি 5 সেকেন্ড পরে এটি জেগে উঠবে এবং ফাইলটি সন্ধান করবে। ফাইলটি উপস্থিত হওয়ার পরে, এটি লুপের বাইরে নেমে আসবে, আপনাকে বলবে যে এটি ফাইলটি খুঁজে পেয়েছে এবং প্রস্থান করতে হবে (প্রয়োজনীয় নয়, তবে পরিপাটি))

এটিকে কোনও স্ক্রিপ্টে রাখুন এবং স্ক্রিপ্ট হিসাবে এটি শুরু করুন &

এটি পটভূমিতে এটি চালানো হবে।

আপনার ব্যবহৃত শেলটির উপর নির্ভর করে সিনট্যাক্সে সূক্ষ্ম পার্থক্য থাকতে পারে। তবে এটির মূল বক্তব্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.