সেমিকোলন এবং / বা ধনুর্বন্ধনী এর সঠিক সংমিশ্রণটি নিয়ে আসতে আমার সমস্যা হচ্ছে। আমি এটি করতে চাই তবে কমান্ড লাইন থেকে ওয়ান-লাইনার হিসাবে:
while [ 1 ]
do
foo
sleep 2
done
সেমিকোলন এবং / বা ধনুর্বন্ধনী এর সঠিক সংমিশ্রণটি নিয়ে আসতে আমার সমস্যা হচ্ছে। আমি এটি করতে চাই তবে কমান্ড লাইন থেকে ওয়ান-লাইনার হিসাবে:
while [ 1 ]
do
foo
sleep 2
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
cmdhist
আপনি বাশ ব্যবহার করছেন কিনা তা পরীক্ষা করে দেখুন?
while true; do sh /Users/myuser/bin/vpn ; done
অবস্থার মধ্যে স্লিপ কমান্ড ব্যবহার করাও সম্ভব। ওয়ান-লাইনার তৈরি করা আরও পরিষ্কার ইমো looking
while sleep 2; do echo thinking; done
while echo thinking ; do sleep 2 ; done
অবশ্যই যদি [যখন] কমান্ড ব্যর্থ হয় তবে লুপটি প্রস্থান করে, তাই আপনাকে করতে হবে while echo thinking || true ; do sleep 2 ; done
তবে আপনি ফিরে যেতে পারেনwhile true ; ...
কোলন সর্বদা "সত্য":
while :; do foo; sleep 2; done
: [arguments]
কোনও প্রভাব ফেলবে না; কমান্ডটি আর্গুমেন্টগুলি প্রসারিত এবং নির্দিষ্ট নির্দিষ্ট পুনর্নির্দেশগুলি সম্পাদনের বাইরে কিছুই করে না। একটি শূন্য প্রস্থান কোড ফিরে এসেছে।
বিবৃতি পৃথক করতে আপনি সেমিকোলন ব্যবহার করতে পারেন:
$ while [ 1 ]; do foo; sleep 2; done
আপনি until
কমান্ডটি ব্যবহার করতে পারেন :
until ((0)); do foo; sleep 2; done
লক্ষ্য করুন বিপরীতে করার while
, until
কমান্ড লুপ ভিতরে যতদিন পরীক্ষা শর্ত একটি প্রস্থান অবস্থা যা শূন্য নয় হিসাবে চালানো যাবে।
একটি 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
until ((0)); 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
&&
লুপের ব্যবহার অন্য যে কোনও সময় সত্যই তা নয়। আপনার যদি দ্বিতীয়টি ঘটে তবেই কেবল প্রথম ঘটনাটি ঘটতে হবে, তারপরে &&
অন্য ;
পর্যাপ্ত ব্যবহার করুন । সত্যই, আপনি সেই লুপের বিষয়বস্তু সংক্ষিপ্ত এবং সহজ রাখতে চান, আদর্শভাবে কেবল একটি কমান্ড, সুতরাং একটি ফাংশন বা স্ক্রিপ্ট।
watch
পরিবর্তে সহজ প্রক্রিয়া দেখার জন্য
ব্যবহার while
:
while true; do echo 'while'; sleep 2s; done
for
লুপ ব্যবহার :
for ((;;)); do echo 'forloop'; sleep 2; done
ব্যবহার করে Recursion
(উপরে তুলনায় কিছুটা আলাদা, কীবোর্ড বাধা এটিকে থামবে না)
list(){ echo 'recursion'; sleep 2; list; } && list;
আপনি যদি কিছু শর্ত পরে লুপটি থামতে চান এবং foo
এই শর্তটি পূরণ করার পরে আপনার কমান্ড শূন্য নয়, তবে আপনি এইভাবে লুপটি ভাঙ্গতে পেতে পারেন:
while foo; do echo 'sleeping...'; sleep 5; done;
উদাহরণস্বরূপ, যদি foo
কমান্ডটি ব্যাচগুলিতে জিনিসগুলি মুছতে থাকে এবং মুছতে কিছুই থাকে না তখন এটি 1 ফিরে আসে।
এটি যদি আপনার কোনও কাস্টম স্ক্রিপ্ট থাকে তবে কোনও শর্ত না হওয়া পর্যন্ত অনেক সময় কমান্ড চালানো দরকার well 1
যখন শর্তটি পূরণ হয় এবং বাইরে বেরোনোর জন্য আপনি স্ক্রিপ্টটি লেখেন0
আবার চালিত হওয়ার সময় এটি ।
উদাহরণস্বরূপ, বলুন আপনার কাছে অজগর স্ক্রিপ্ট রয়েছে batch_update.py
যা একটি ডাটাবেসে 100 টি সারি 0
আপডেট করে এবং আপডেট করার মতো আরও কিছু আছে এবং 1
যদি আরও কিছু না থাকে তবে ফিরে আসে । নিম্নলিখিত কমান্ডটি আপনাকে আপডেটের মধ্যে 5 সেকেন্ডের ঘুম সহ একসাথে 100 টি সারি আপডেট করার অনুমতি দেবে:
while batch_update.py; do echo 'sleeping...'; sleep 5; done;
foo
কোডটি দিয়ে কমান্ডটি প্রস্থান করবেন 1
। আমি একটি উত্তর দিয়ে আমার উত্তর আপডেট করেছি।
আমি যদি দুটি ব্যবহারিক উদাহরণ দিতে পারি ("কিছুটা" আবেগের সাথে))।
এটি "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
শুধু অবদান রাখার চেষ্টা করছি।
ls -1 *.jpg
এবংrm *.jpg
আপনি এটি খুব সতর্ক করার চেষ্টা করতে পারেন: এটি আপনার করা উচিত নয় তবে যেহেতু প্রশ্নটি শেষ না করে অসীম লুপের জন্য জিজ্ঞাসা করছে ... আপনি এটি কীভাবে এটি করতে পারেন।
while [[ 0 -ne 1 ]]; do echo "it's looping"; sleep 2; done