লুপের জন্য স্থগিত প্রক্রিয়া পুনরায় শুরু করুন


13

আমি বাশ চালাচ্ছি:

for i in ull-*.pbm; do convert $i tmp2/$i.pdf ; done

আমি Ctrl-Zদৌড়ে মাঝখানে, এবং তারপরে fgতার কাজের আইডি। তবে বাকি পুনরাবৃত্তিগুলি শেষ করা অবিরত নয়। আমি ভাবছি কেন?


2
আমি এটি নিশ্চিত করতে পারি for i in *.txt; do echo "$i"; sleep 0.5 ; done(জিএনইউ বাশ, সংস্করণ 4.2.53)
হউক লেগেছে

উত্তর:


11

Ctrl-Zবর্তমানে চলমান প্রক্রিয়া স্থগিত করে। প্রকাশে

for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done

ছাড়া সমস্ত কমান্ড convert(অর্থাত for, in, doএবং done) হয় bashবর্তমান শেল চলমান 'র কীওয়ার্ড এবং শেল নিজেই স্থগিত করতে পারবেন না (এবং এটি আপনার উদ্দেশ্য যাহাই হউক না কেন নয়)। সুতরাং যখন আপনি আঘাত করবেন Ctrl-Zএবং কমান্ড convertস্থগিত করবেন তখন আর প্রক্রিয়া করার কিছু নেই বলে লুপটি কেবল ছেড়ে যাবে।

আপনি যদি পুরো লুপটি স্থগিত করতে সক্ষম হতে চান তবে কেবল সাব-শেল পরিবেশে এটি চালান:

(for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done)

আমি জানি যে একমাত্র শেলটি বর্তমান শেলের পুরো লুপটি স্থগিত করতে সক্ষম zsh


4
নাহ, Ctrl-Zকেবলমাত্র একটি রূপান্তর উদাহরণ স্থগিত করতে পারে, লুপটি চালিয়ে যেতে এবং অন্যটি শুরু করতে পারে না এমন কোনও কারণ নেই। কোনও কারণে bashলুপটি থামায়। আমি যখন লুপটিতে পরীক্ষা dashচালিয়ে যাই তখন অন্যান্য শেলগুলি সম্ভবত একই কাজ করে।
গ্রামীণ

6
@ গ্রেমে এক পুনরাবৃত্তি স্থগিত করে লুপটি চালিয়ে যাওয়া আমার পক্ষে বিপজ্জনক বলে মনে হচ্ছে কারণ পরবর্তী পদক্ষেপটি পূর্বের উপর নির্ভর করতে পারে। আমার পক্ষে একমাত্র যুক্তিসঙ্গত সমাধান হ'ল পুরো লুপটি স্থগিত করা এবং এটি সাব- zshশেলের মাধ্যমে করা যেতে পারে ( বর্তমান শেলটিতে পুরো লুপটি স্থগিত করতে সক্ষম)।
জিম্মিজ

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