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


12

আমার একাধিক কমান্ড সহ স্ক্রিপ্ট রয়েছে। আমি কীভাবে একসাথে চলার জন্য কমান্ডগুলি গ্রুপ করতে পারি (আমি কয়েকটি কমান্ডের গোষ্ঠী তৈরি করতে চাই group প্রতিটি গ্রুপের মধ্যে কমান্ডগুলি সমান্তরালভাবে চলতে হবে (একই সময়ে) groups গ্রুপগুলি ক্রমান্বয়ে চালানো উচিত, শুরু করার আগে একটি গ্রুপ শেষ হওয়ার অপেক্ষায় The পরবর্তী গ্রুপ) ... অর্থাৎ

#!/bin/bash
command #1
command #2
command #3
command #4
command #5
command #6
command #7
command #8
command #9
command #10

আমি কীভাবে প্রতি 3 টি কমান্ড পেতে পারি? আমি চেষ্টা করেছিলাম:

#!/bin/bash
{
command #1
command #2
command #3
} & 
{   
command #4
command #5
command #6
} & 
{
command #7
command #8
command #9
}&
command #10

তবে এটি সঠিকভাবে কাজ করে না (একই সাথে সমান্তরালে কমান্ডের গোষ্ঠীগুলি পরিচালনা করতে চাই Also এছাড়াও পরবর্তী গ্রুপটি চালানোর আগে প্রথম গ্রুপটি শেষ হওয়ার জন্য আমার অপেক্ষা করতে হবে)

স্ক্রিপ্টটি একটি ত্রুটি বার্তা সহ প্রস্থান করছে!


2
আপনার মানে কী, একসাথে দৌড়াও। আপনার অর্থ কি একই সময়ে সমান্তরালভাবে চালানো? আপনি কীভাবে এটি জানেন যে "সঠিকভাবে কাজ করে না?" আপনি যখন জানবেন কীভাবে এটি সঠিকভাবে কাজ করে? আপনি কি পরবর্তী গ্রুপটি চালানোর আগে প্রথম গ্রুপটির সমাপ্তির জন্য অপেক্ষা করতে চান?
রবার্টল

@ রবার্টএল.হিস আমি একই সাথে সমান্তরাল বলতে চাইছি। স্ক্রিপ্টটি একটি ত্রুটি বার্তা সহ প্রস্থান করছে। হ্যাঁ পরের গ্রুপটি চালানোর আগে আমার ফার্ডস্ট গ্রুপটি শেষ হওয়ার অপেক্ষা করতে হবে।

1
@ গোরো আপনাকে উদ্ধৃত করে, স্ক্রিপ্টটি একটি ত্রুটি বার্তা সহ প্রস্থান করছে। এই জাতীয় বার্তা যুক্ত করার জন্য দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন (সমাপ্তির জন্য) এবং চিট-চ্যাটটি সরিয়ে ফেলুন (পরামর্শগুলি প্রশংসিত)।
ডেভ_এলকারিন

এটি কি প্রতিটি উদাহরণে একই কমান্ড চলছে? একই নাম?
রবার্টল

1
@ গোরো, এটা কি সঠিক? "আপনার কয়েকটি কমান্ডের গোষ্ঠী রয়েছে। প্রতিটি দলের মধ্যেই কমান্ড সমান্তরালভাবে চলতে হবে (একই সাথে)। গ্রুপগুলি ক্রমান্বয়ে চালানো উচিত, পরের গ্রুপটি শুরু করার আগে একটি গ্রুপ শেষ হওয়ার অপেক্ষায়।"
রবার্টএল

উত্তর:


20

প্রতিটি গ্রুপের মধ্যে কমান্ড সমান্তরালভাবে চালিত হয় এবং গোষ্ঠীগুলি ধারাবাহিকভাবে চালিত হয়, সমান্তরাল কমান্ডের প্রতিটি গ্রুপ পূর্ববর্তী গ্রুপটি কার্যকর করার আগে শেষ হওয়ার অপেক্ষায় অপেক্ষা করে।

নীচে একটি কার্যকারী উদাহরণ:

নীচের কোড হিসাবে 3 টি কমান্ডের গোষ্ঠী ধরুন। প্রতিটি গ্রুপে তিনটি কমান্ডের সাথে পটভূমিতে শুরু হয় &

3 টি কমান্ড প্রায় একই সময়ে শুরু হবে এবং সমান্তরালভাবে চলবে যখন স্ক্রিপ্টটি waitsতাদের সমাপ্ত করার জন্য।

তৃতীয় গ্রুপের প্রস্থানের সমস্ত তিনটি কমান্ডের পরে, command 10কার্যকর করা হবে।

$ cat command_groups.sh 
#!/bin/sh

command() {
    echo $1 start
    sleep $(( $1 & 03 ))      # keep the seconds value within 0-3
    echo $1 complete
}

echo First Group:
command 1 &
command 2 &
command 3 &
wait

echo Second Group:
command 4 &
command 5 &
command 6 &
wait

echo Third Group:
command 7 &
command 8 &
command 9 &
wait

echo Not really a group, no need for background/wait:
command 10

$ sh command_groups.sh 
First Group:
1 start
2 start
3 start
1 complete
2 complete
3 complete
Second Group:
4 start
5 start
6 start
4 complete
5 complete
6 complete
Third Group:
7 start
8 start
9 start
8 complete
9 complete
7 complete
Not really a group, no need for background/wait:
10 start
10 complete
$   

যদিও আমি মনে করি আপনার উদাহরণগুলিতে কুঁড়িগুলি সম্পূর্ণ অর্থহীন। অপেক্ষা প্রক্রিয়া-বিশ্বব্যাপী, এবং বাঁকা গোষ্ঠীগুলি এই ক্ষেত্রে একটি নতুন কাঁটাচামচ তৈরি করবে না।
PSkocik

1
@ স্পস্কিক, সত্য ভেস্টিগিয়াল অঙ্গ।
রবার্টএল

6
{
command #1
command #2
command #3
} & 
{   
command #4
command #5
command #6
} & 
{
command #7
command #8
command #9
}&
command #10
wait #<===

কাজ করা উচিত (প্রতিটি পৃথক ট্রিপলেট উপাদান ক্রমান্বয়ে চলবে, তবে এইচটি গ্রুপগুলি সমান্তরালে চলবে)। গ্রুপগুলি শেষ হওয়ার আগে আপনি সম্ভবত পিতামাতার শেলটি প্রস্থান করতে চান না - সুতরাং wait


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