কিছু যুগপত আদেশের পরে বাশ কমান্ড চালাবেন?


13

আমি সমান্তরালভাবে কিছু কমান্ড চালাতে চাই। এই সমস্ত কমান্ড শেষ হয়ে গেলে পরবর্তীটি শুরু করুন। আমি যদিও নিম্নলিখিত পদ্ধতির কাজ করবে

#!/bin/bash
command1 &
command2 &
command3 &&
command4

কিন্তু তা হয়নি। command4প্রথম তিনটি কমান্ড সম্পূর্ণ শেষ হয়ে গেলে আমাকে চালানো দরকার ।

উত্তর:


28
#!/bin/bash
command1 &
command2 &
command3 &

wait
command4

wait (কোনও যুক্তি ছাড়াই) সমস্ত ব্যাকগ্রাউন্ড প্রক্রিয়া না আসা পর্যন্ত অপেক্ষা করা হবে will

এর সম্পূর্ণ বিবরণ waitমধ্যে bashম্যানুয়াল:

wait [-n] [n ...]

প্রতিটি নির্দিষ্ট শিশু প্রক্রিয়াটির জন্য অপেক্ষা করুন এবং এর সমাপ্তির স্থিতি ফিরিয়ে দিন। প্রত্যেকটি nএকটি প্রক্রিয়া আইডি বা একটি কাজের স্পেসিফিকেশন হতে পারে; যদি কোনও কাজের বৈশিষ্ট্য দেওয়া হয়, তবে সেই কাজের পাইপলাইনে সমস্ত প্রক্রিয়া অপেক্ষা করা হবে। যদি nদেওয়া না হয় তবে বর্তমানে সমস্ত সক্রিয় শিশু প্রক্রিয়াগুলির জন্য অপেক্ষা করা হচ্ছে এবং প্রত্যাবর্তনের অবস্থা শূন্য। তাহলে -nবিকল্প সরবরাহ করা হয়, waitকোন কাজের জন্য অপেক্ষা করছে বিনষ্ট এবং তার প্রস্থানের অবস্থা ফেরৎ করতে। যদি nকোনও অস্তিত্বহীন প্রক্রিয়া বা কাজ নির্দিষ্ট করে দেয় তবে রিটার্নের স্থিতি হল 127 Otherwise


1
অন্য বিকল্পটি হ'ল প্রতিটি সন্তানের পিআইডি সংরক্ষণের মতো কিছু ব্যবহার করে PID1=$!এবং তারপরে তাদের সকলের জন্য অপেক্ষা করুন wait "$PID1" "$PID2" "$PID3"। এটি কিছুটা জটিল, তবে যদি প্রক্রিয়াটির অন্য শিশু থাকে তবে আপনি অপেক্ষা করতে চান না যদি কাজ করে।
ক্যাস্পারড

1
সেক্ষেত্রে @ ক্যাস্পারড বেটার: cmd1 & pids=( $! ); cmd2 & pids+=( $! ); cmd3 & pids+=( $! ); wait "${pids[@]}"বা এ জাতীয় কিছু similar
কুসালানন্দ

@ ক্যাস্পার্ড দ্বারা "আরও ভাল" মানে "শুধুমাত্র একটি পরিবর্তনশীল ব্যবহার করা হয়েছে"। অনেকগুলি ব্যবহার করে সহজাতভাবে কিছু ভুল হয় না এবং সম্ভবত এই জাতীয় ছোট ক্ষেত্রে সম্পূর্ণরূপে ঠিক।
কুসালানন্দ

0

আমি waitউত্তরটি পছন্দ করি তবে কেবল একাডেমিক অনুশীলন হিসাবে, আমার মনে হয় এটিও কার্যকর হবে:

bash -c 'command1 & command2 & command3 &' && command4

আমি ভুল হলে আমাকে সংশোধন করুন।


2
আপনি এটি পরীক্ষা করেছেন? এটি একেবারে কাজ করে না। উদাহরণ: time bash -c "sleep 5 &sleep 5 &sleep 5 &" && echo foo এটি যদি না বলে যে বাশ কমান্ডটি পাঁচ সেকেন্ড নিয়েছে তবে এটি আপনি যা চান তা করেনি।
শেঠ রবার্টসন

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