লুপের সময় একক-লাইন বাশ অসীমের জন্য সিনট্যাক্স


633

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

while [ 1 ]
do
    foo
    sleep 2
done

4
সেমিকোলনগুলির সাথে নিউলাইনগুলি প্রতিস্থাপন করুন। লুপগুলির জন্য একই কাজ করে।
টম

23
@ টম: এটি সর্বদা কার্যকর হয় না। করার পরে, আপনার অবশ্যই প্রথম কমান্ড থাকতে হবে, সেমিকোলন নয়
স্টেফানো বোরিনি

উত্তর:


1230
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

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

@ ভিনসেন্টচাইব, cmdhistআপনি বাশ ব্যবহার করছেন কিনা তা পরীক্ষা করে দেখুন?
অলোক সিংহল

অসাধারণ! ম্যাভেরিক্সে পুরোপুরি কাজ করে (ম্যাক ওএস-এক্স 10.9) এবং আমাকে একটি ভিপিএন চালিয়ে যেতে দেয়। কোনও কুকি ত্রুটিযুক্ত ত্রুটি সহ কয়েক ঘন্টা পরে ওপেনকনেক্ট সংযোগ বিচ্ছিন্ন হয়ে যায়। সুতরাং আমি শেল স্ক্রিপ্টে ওপেনকনেক্ট কমান্ডটি রেখেছি, মূল হয়ে উঠতে sudo su, এবং এই while true; do sh /Users/myuser/bin/vpn ; done
সেন্টিমিডি

170

অবস্থার মধ্যে স্লিপ কমান্ড ব্যবহার করাও সম্ভব। ওয়ান-লাইনার তৈরি করা আরও পরিষ্কার ইমো looking

while sleep 2; do echo thinking; done

16
ভাল এটি সিনট্যাক্স পরিবর্তন করার চেয়ে আরও বেশি কিছু করে - এটি ঘুমের পরে কমান্ডটি কার্যকর করে । পূর্ববর্তী উত্তরে, কমান্ডটি এখনই কার্যকর করা হবে। কিছু খেয়াল করার জন্য।
ড্যানগার্ডন

@ ড্যানগোর্ডন while echo thinking ; do sleep 2 ; done অবশ্যই যদি [যখন] কমান্ড ব্যর্থ হয় তবে লুপটি প্রস্থান করে, তাই আপনাকে করতে হবে while echo thinking || true ; do sleep 2 ; doneতবে আপনি ফিরে যেতে পারেনwhile true ; ...
ব্রায়ান কার্সিচ

69

কোলন সর্বদা "সত্য":

while :; do foo; sleep 2; done

15
কোলন কেন সবসময় সত্য?
জর্জেন পল

8
সমুদ্রের নীচে @ আনারস: বাশ ম্যান পৃষ্ঠা থেকে: (বিভাগে বিল্টিন কমেন্টস শেল্ডে) : [arguments] কোনও প্রভাব ফেলবে না; কমান্ডটি আর্গুমেন্টগুলি প্রসারিত এবং নির্দিষ্ট নির্দিষ্ট পুনর্নির্দেশগুলি সম্পাদনের বাইরে কিছুই করে না। একটি শূন্য প্রস্থান কোড ফিরে এসেছে।
অ্যাড্রিয়ান ডাব্লু

2
এই বাক্য গঠনটি সুপারিশ করা হয়: শেল নিজেই এর অংশ অর্থাৎ: শেল বিল্টিন কমান্ড।
অ্যাভনার

@ অ্যানালিটিক আপনি কি বলছেন যে এটি একটি প্লাস বা বিয়োগ? ;-)
ব্রায়ান কার্সিচ

33

বিবৃতি পৃথক করতে আপনি সেমিকোলন ব্যবহার করতে পারেন:

$ while [ 1 ]; do foo; sleep 2; done

3
আমি এই উত্তরটি পছন্দ করি কারণ এটি কখন এবং কেন ব্যাখ্যা করে; (সেমিকোলন) প্রয়োজন।
মিঃ আন্দ্রেয়াস জিও

29

আপনি 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কাজ বলে মনে হচ্ছে না। এটি নিরন্তর অসীম।
030

11

খুব সাধারণ অসীম লুপ .. :)

while true ; do continue ; done

আপনার প্রশ্নটি হ'ল:

while true; do foo ; sleep 2 ; done

8

আমি কেবল 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

1
ঠিক আছে, &&লুপের ব্যবহার অন্য যে কোনও সময় সত্যই তা নয়। আপনার যদি দ্বিতীয়টি ঘটে তবেই কেবল প্রথম ঘটনাটি ঘটতে হবে, তারপরে &&অন্য ;পর্যাপ্ত ব্যবহার করুন । সত্যই, আপনি সেই লুপের বিষয়বস্তু সংক্ষিপ্ত এবং সহজ রাখতে চান, আদর্শভাবে কেবল একটি কমান্ড, সুতরাং একটি ফাংশন বা স্ক্রিপ্ট।
thecoshman


6

ব্যবহার 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;

5

আপনি যদি কিছু শর্ত পরে লুপটি থামতে চান এবং 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। আমি একটি উত্তর দিয়ে আমার উত্তর আপডেট করেছি।
হ্যাঁ_আইটি এর_আমি

2

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

এটি "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

শুধু অবদান রাখার চেষ্টা করছি।


1
@ জে কেইনাইট - এই উদাহরণগুলির জন্য, আপনি কেবল করেন না ls -1 *.jpgএবংrm *.jpg
কেভিন ফেগান

2
উভয়ই অসীম লুপ নয় এবং লুপের সময় নয়।
মারিয়ান

2

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

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

আপনি এমনকি এটি করতে হবে কেন?
gniourf_gniourf

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