লুপ যখন একটি একক লাইন Bash অসীম জন্য সিনট্যাক্স



loops while-loop (8)

আমি সেমিকোলন এবং / অথবা ধনুর্বন্ধনী ডান সমন্বয় সঙ্গে আসছে সমস্যা হচ্ছে। আমি এটা করতে চাই, কিন্তু কমান্ড লাইন থেকে এক-লাইনার হিসাবে:

while [ 1 ]
do
    foo
    sleep 2
done

https://ffff65535.com


আপনি এটিও চেষ্টা করতে পারেন সতর্কতা: এটি আপনাকে করা উচিত নয় তবে প্রশ্নটি অসীম লুপের জন্য কোনও প্রান্ত ছাড়াই জিজ্ঞাসা করা হচ্ছে ... এইভাবে আপনি এটি করতে পারেন।

while [[ 0 -ne 1 ]]; do echo "it's looping";   sleep 2; done

আপনি কমান্ড until ব্যবহার করতে পারেন:

until ((0)); do foo; sleep 2; done

উল্লেখ্য যে বিপরীতে, লুপের ভিতরে কমান্ডগুলি চালানো হবে যতক্ষন না পরীক্ষার শর্তটি একটি প্রস্থান স্থিতি থাকে যা শূন্য নয়।

একটি while লুপ ব্যবহার করে:

while read i; do foo; sleep 2; done < /dev/urandom

লুপ for একটি ব্যবহার করে:

for ((;;)); do foo; sleep 2; done

অন্য উপায় ব্যবহার করে until :

until [ ]; do foo; sleep 2; done

আমি শুধুমাত্র WHILE বিবৃতির জন্য সেমিকোলনগুলি ব্যবহার করতে পছন্দ করি, এবং && অপারেটর লুপকে একাধিক জিনিস করতে করতে ...

তাই আমি সবসময় এই মত এটা

while true ; do echo Launching Spaceship into orbit && sleep 5s && /usr/bin/launch-mechanism && echo Launching in T-5 && sleep 1s && echo T-4 && sleep 1s && echo T-3 && sleep 1s && echo T-2 && sleep 1s && echo T-1 && sleep 1s && echo liftoff ; done

একটি খুব সহজ অসীম লুপ .. :)

while true ; do continue ; done

আপনার প্রশ্ন Fr এটা হবে:

while true; do foo ; sleep 2 ; done

কিছু শর্তের পরে যখন লুপটি থামাতে চান, এবং এই শর্তটি পূরণ হয়ে গেলে আপনার foo কমান্ডটি অ-জিরো ফিরে আসে তবে আপনি লুপটি এভাবে ভাঙ্গতে পেতে পারেন:

while foo; do echo 'sleeping...'; sleep 5; done;

উদাহরণস্বরূপ, foo কমান্ড ব্যাচগুলিতে জিনিসগুলি মুছে ফেলছে, এবং এটি মুছে ফেলার জন্য কিছুই অবশিষ্ট থাকলে 1 প্রদান করে।

যদি আপনার কোনও কাস্টম স্ক্রিপ্ট থাকে তবে এটি কোনও অবস্থা পর্যন্ত অনেকবার একটি কমান্ড চালানোর প্রয়োজন হয়। যখন শর্তটি পূরণ হয়ে যায় তখন 0 দিয়ে প্রস্থান করার জন্য আপনি স্ক্রিপ্টটি লিখেছেন এবং এটি পুনরায় চালানোর সময় 0 দিয়ে প্রস্থান করুন।

উদাহরণস্বরূপ, বলুন আপনার একটি পাইথন স্ক্রিপ্ট আছে batch_update.py যা ডাটাবেসের 100 সারি আপডেট করে এবং আপডেট করতে আরও 0 ফেরত দেয় এবং যদি না থাকে তবে 1 । নিম্নোক্ত কমান্ড আপনাকে আপডেটগুলির মধ্যে 5 সেকেন্ডের জন্য ঘুমানোর সময় 100 সারি আপডেট করতে অনুমতি দেবে:

while batch_update.py; do echo 'sleeping...'; sleep 5; done;

পরিবর্তে ব্যবহার watch দেখার সহজ প্রক্রিয়া জন্য


যদি আমি দুটি বাস্তব উদাহরণ দিতে পারি (কিছুটা "আবেগ" সহ)।

এই ফোল্ডার "img" ফোল্ডারে ".jpg" এর সাথে শেষ হওয়া সমস্ত ফাইলের নাম লিখেছে:

for f in *; do if [ "${f#*.}" == 'jpg' ]; then echo $f; fi; done

এটি তাদের মুছে ফেলে:

for f in *; do if [ "${f#*.}" == 'jpg' ]; then rm -r $f; fi; done

শুধু অবদান চেষ্টা।


while true; do foo; sleep 2; done

যাইহোক, যদি আপনি এটি কমান্ড প্রম্পটে মাল্টিলাইন হিসাবে দেখান (এবং আপনি দেখছেন) এবং তারপরে ইতিহাসটিকে তীরচিহ্ন দিয়ে কল করুন, আপনি এটি একক লাইনে পাবেন, সঠিকভাবে পঞ্চাশিত।

$ while true
> do
>    echo "hello"
>    sleep 2
> done
hello
hello
hello
^C
$ <arrow up> while true; do    echo "hello";    sleep 2; done




while-loop