ইতিমধ্যে চলমান অগ্রগতিতে আমি কি কোনওভাবে "&& prog2" যুক্ত করতে পারি?


87

বেশিরভাগ শেল নির্দিষ্ট উপায়ে কমান্ড কার্যকর করার মতো &&এবং কার্য ;সম্পাদন করে। তবে যদি একটি কমান্ড ইতিমধ্যে চলমান থাকে, তবে আমি কি এখনও কোনওরূপে প্রথমটির ফলাফলের উপর ভিত্তি করে কার্যকর করতে আরও একটি কমান্ড যুক্ত করতে পারি?

বলো আমি দৌড়ে গেলাম

$ /bin/myprog
some output...

কিন্তু আমি সত্যিই চেয়েছিলেন /bin/myprog && /usr/bin/mycleanup। আমি myprogসবকিছু হত্যা করতে এবং পুনরায় চালু করতে পারি না কারণ খুব বেশি সময় নষ্ট হয়ে যায়। আমি করতে Ctrl+ Zএটি এবং fg/ bgপ্রয়োজনে। এটি কি আমাকে অন্য আদেশে শৃঙ্খলাবদ্ধ করতে দেয়?

আমি বেশিরভাগ ক্ষেত্রে ব্যাশে আগ্রহী, তবে সমস্ত সাধারণ শেলের উত্তর স্বাগত!

উত্তর:


118

আপনি waitকমান্ডটি সহ একই শেলটিতে এটি করতে সক্ষম হবেন :

$ sleep 30 &
[1] 17440

$ wait 17440 && echo hi

...30 seconds later...
[1]+  Done                    sleep 30
hi

বাশ ম্যান পৃষ্ঠা থেকে অংশ

wait [n ...]
     Wait for each specified process and return its termination status. Each n 
     may be a process ID or a job specification; if a job spec is given,  all 
     processes  in that job's pipeline are waited for.  If n is not given, all 
     currently active child processes are waited for, and the return status is 
     zero.  If n specifies a non-existent process or job, the return status is 
     127.  Otherwise, the return status is the exit status of the last process 
     or job waited for.

কমান্ডের অপেক্ষার কাজটি করা উচিত।
বিলথোর

পটভূমি প্রক্রিয়াটির পিআইডি প্রবেশের জন্য কয়েকটি সংক্ষিপ্ত ফর্ম রয়েছে যেমন %, %1এবং $!। পিআইডি সরবরাহ করা গুরুত্বপূর্ণ বা দ্বিতীয় কমান্ড সর্বদা চলবে will
বিলথোর

@ বিল্টহোর - আপনি কি কেবল উত্তরটির যোগ্যতা অর্জন করছেন বা আমাকে এটি বলছেন?
slm

আমি উত্তরটির যোগ্যতা অর্জন করছি। একটি সমতল waitপছন্দসই ফলাফল সরবরাহ করতে ব্যর্থ হবে। সংক্ষিপ্ত ফর্মগুলি ব্যবহার করা সাধারণ কারণ এগুলি টাইপসের ঝুঁকি কম।
বিলথোর

2
আপনার চকচকে নতুন ব্যাজে আপনাকে অভিনন্দন জানাতে আমার প্রথম হতে দিন :)
টেরডন

63

fgপ্রোগ্রামটি থেকে পুনরায় শুরু হওয়া প্রস্থান কোডটি দিয়ে ফিরে আসে। অতএব আপনি আপনার প্রোগ্রামটি স্থগিত করতে পারেন ^Zএবং তারপরে fg && ...এটি পুনরায় শুরু করতে ব্যবহার করতে পারেন।

$ /bin/myprog
some output...
^Z
[1]+ Stopped              /bin/myprog
$ fg && /usr/bin/mycleanup

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

3
@ বুরহানআলি myprogদ্বিতীয় বারের জন্য স্থগিতকরণের ফলে fgপ্রস্থান কোড 20 - যা শূন্য নয়, সমাপ্ত হওয়ার কারণ , যাতে শৃঙ্খলিত mycleanupকমান্ড কার্যকর হয় না।
n.st

1

আপনি যা চাইছেন তা সম্ভব কিনা তা নিশ্চিত নন তবে আপনি যদি এখনও শেলটি থেকে প্রোগ্রামটি শুরু করে থাকেন তবে আপনি সর্বদা $?শেষ প্রক্রিয়ার প্রস্থান স্থিতিটি পরীক্ষা করতে পারেন :

$ /bin/myprog
some output...
$ if [ $? -ne 0 ];then echo "non-zero exit status";else echo "0 exit status";fi

1
এটি কাজ করবে, তবে তার পরে তাকে নিজেই চালাতে হবে, কমান্ড শেষ হলে তিনি স্বয়ংক্রিয়ভাবে এটি চালাতে চান।
slm

@ এসএমএল সম্মত সেই সঠিক সমস্যার সমাধান আমার কাছে নেই।
জোসেফ আর।

3
waitবাশ-এ কমান্ডটি দেখুন ।
slm

1

কাজটি যদি অগ্রভাগে হয়, তবে এই কমান্ডগুলির একটিরই আপনার প্রত্যাশা মতো আচরণ করা হবে।

[ $? -eq 0 ] && prog2
(( $? )) || prog2

দ্রষ্টব্য: $? চলমান প্রোগ্রামের রিটার্নের স্থিতিটি যখন এটি প্রস্থান করবে তখন এতে অন্তর্ভুক্ত থাকবে।

এটি স্পষ্টভাবে জানিয়ে দিচ্ছে যে আপনি যদি কমান্ডটি মূলত কমান্ডটি প্রবেশ করে থাকেন তবে শেলটি কী করবে।

prog1 && prog2

যদি প্রথম কমান্ডটি পড়ছে stdinনা এবং অগ্রভাগে চলছে, প্রথম কমান্ডটি চলমান অবস্থায় নতুন কমান্ডটি প্রবেশ করা যাবে। প্রথম কমান্ড কার্যকর হলে শেলটি এটি পড়তে এবং চালিত করবে। কমান্ডটি যদি পটভূমিতে চলতে পারে তবে এটি পড়ার সম্ভাবনা কম stdin

সম্পাদনা: পটভূমিতে কাজ করা এবং WAITকমান্ড ব্যবহার করেও ব্যবহার করা যেতে পারে। অন্যান্য কাজও যদি পটভূমিতে চালিত হয় তবে এটি অবশ্যই যত্ন সহকারে করা উচিত। একটি কাজের নির্দিষ্টকরণের জন্য WAITকমান্ডের কাজের অপেক্ষা করা স্থিতি ফিরে পাওয়া দরকার ।


এটি কাজ করবে, তবে তার পরে তাকে নিজেই চালাতে হবে, কমান্ড শেষ হলে তিনি স্বয়ংক্রিয়ভাবে এটি চালাতে চান।
slm

4
@slm যতক্ষণ না কমান্ড স্টিডিন না পড়ছে, প্রথম কমান্ড চলাকালীন নতুন কমান্ডটি প্রবেশ করা যেতে পারে। প্রথম কমান্ডটি শেষ হওয়ার সাথে সাথে শেল এটি পড়বে।
বিলথোর

পটভূমি হওয়ার পরে যদি সে শেলটিতে কিছু করে তবে সম্ভবত এটি হোস্ট করা হবে। কমপক্ষে প্রিলিম অনুযায়ী। পরীক্ষা আমি এতদূর করছি!
slm

2
@ বিলটোর আমি মনে করি আপনার এই মন্তব্যে আপনার উত্তরের যোগ করা উচিত।
জোসেফ আর।

2
হ্যাঁ, ব্যবহার waitকরাও আদর্শ নয়। আইএমও এর সুবিধাটি হ'ল এটি আমাদের কাছে একটি পরিষ্কার এপিআই দেয় যা আমরা কাজ করছি। কিছু চলার পরে কমান্ড লাইনে আরও কমান্ড টাইপ করা আমার কাছে কিছুটা হ্যাকি মনে হয়েছিল। waitএখনও চলমান পিআইডি-তে সরাসরি লিঙ্ক না পেয়ে ভোগেন, রিটার্নের স্থিতিটি কাটাবেন। এটি আরও ডাব্লু / কীভাবে বাশ জিনিসগুলি প্রয়োগ করে তা একটি সমস্যা বলে মনে হচ্ছে: stackoverflow.com/questions/356100/… । সুতরাং এটি এটি হিসাবে হিসাবে ভাল হতে পারে।
slm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.