আমার মতো দৃশ্যের নীচে রয়েছে:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
আমার মতো দৃশ্যের নীচে রয়েছে:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
উত্তর:
এই লুপটি করার অনেকগুলি উপায় রয়েছে।
সঙ্গে ksh93সিনট্যাক্স (এছাড়াও দ্বারা সমর্থিত zshএবং bash):
for (( i=0; i<10; ++i)); do
[ -e filename ] && break
sleep 10
done
কোনও পসিক্স-এর মতো শেলের জন্য:
n=0
while [ "$n" -lt 10 ] && [ ! -e filename ]; do
n=$(( n + 1 ))
sleep 10
done
দু'টি লুপ আবার ফাইলটির অস্তিত্ব পরীক্ষা করার আগে প্রতিটি পুনরাবৃত্তিতে 10 সেকেন্ড ঘুমায়।
লুপটি শেষ হয়ে গেলে, 10 বার দৌড়ানোর কারণে বা ফাইলটি উপস্থিত হওয়ার কারণে লুপটি বেরিয়ে গেছে কিনা তা নির্ধারণ করার জন্য আপনাকে শেষবারের জন্য ফাইলটির অস্তিত্বের জন্য পরীক্ষা করতে হবে।
আপনি যদি চান এবং যদি আপনার ইনোটিফাই-সরঞ্জামগুলিতে অ্যাক্সেস থাকে তবে আপনি sleep 10কলটি প্রতিস্থাপন করতে পারেন
inotifywait -q -t 10 -e create ./ >/dev/null
এটি বর্তমান ডিরেক্টরিতে কোনও ফাইল তৈরির ইভেন্ট ঘটতে অপেক্ষা করবে তবে এটি 10 সেকেন্ড পরে শেষ হবে। প্রদত্ত ফাইলের নামটি উপস্থিত হওয়ার সাথে সাথে আপনার লুপটি প্রস্থান করবে (যদি এটি উপস্থিত হয়)।
সহ পুরো কোড, inotifywait( sleep 10যদি আপনি এটি না চান তবে প্রতিস্থাপন করুন ) এর মতো দেখতে পাবেন
for (( i=0; i<10; ++i)); do
[ -e filename ] && break
inotifywait -q -t 10 -e create ./ >/dev/null
done
if [ -e filename ]; then
echo 'file appeared!'
else
echo 'file did not turn up in time'
fi
inotifywaitএকটি ড্রপ-ইন প্রতিস্থাপন হিসাবে ব্যবহার করছি sleep।
গণনাটি যদি পরিবর্তনশীল না হয় তবে আপনি ব্রেস সম্প্রসারণ ব্যবহার করতে পারেন:
for i in {1..10} # you can also use {0..9}
do
whatever
done
গণনাটি যদি পরিবর্তনশীল হয় তবে আপনি seqকমান্ডটি ব্যবহার করতে পারেন :
count=10
for i in $(seq $count)
do
whatever
done
$(seq $count)
n=0
until [ "$((n+=1))" -gt 10 ]
do <exists? command exit
done
echo oh noes!
যদিও test -e file && exitআরও নমনীয়
exists1বা অন্য কোনও ফাইলের সন্ধান করবে , এটি এখনও / যখন কোনও ম্যাচিং ফাইল খুঁজে না পাওয়া যায় তখন একগুচ্ছ ত্রুটি মুদ্রণ করে। (একাধিক ম্যাচ থাকলে এটিও ত্রুটিযুক্ত)) আমার পরীক্ষা করা অন্য কোনও শেল মনে হয় যে কোনও ক্ষেত্রে ত্রুটি দেয় ...
done 2<>/dev/null। নেই bashযে স্ক্রিপ্টের করে? আমি ভেবেছিলাম এটি কেবল একটি -iপ্রাকৃতিক প্রেক্ষাপটে কার্যকর হয়েছে। এখনও, exists?একটি ফিলার নাম হিসাবে অনেক file। তবে হ্যাঁ, আমি পুনর্নির্দেশগুলিতে উদ্ধৃতিগুলি ঘৃণা করি - যদি স্ক্রু এত বেশি থাকে।
test -e।