ধরুন আমার কাছে নিম্নলিখিত পাইপ রয়েছে:
a | b | c | d
আমি কিভাবে শেষ হওয়ার জন্য অপেক্ষা করতে পারেন c
(অথবা b
) এ sh
বা bash
? এর অর্থ এই যে স্ক্রিপ্ট d
যে কোনো সময় শুরু করতে পারেন (এবং না না অপেক্ষা করা প্রয়োজন) কিন্তু থেকে সম্পূর্ণ আউটপুট প্রয়োজন c
কাজ সঠিকভাবে।
ব্যবহারের ক্ষেত্রে একটি হল difftool
জন্য git
ইমেজ তুলনা করা হয়। এটিকে বলা হয় git
এবং এর ইনপুট ( a | b | c
অংশ) প্রক্রিয়া করা এবং তুলনার ফলাফল ( d
অংশ) প্রদর্শন করা দরকার। আহ্বানকারী ইনপুট যে জন্য প্রয়োজন বোধ করা হয় মুছে ফেলবে a
এবং b
। এর অর্থ হ'ল স্ক্রিপ্ট থেকে ফিরে আসার আগে প্রক্রিয়া c
(বা b
) অবশ্যই শেষ করতে হবে। অন্যদিকে, আমি অপেক্ষা করতে পারি না d
কারণ এর অর্থ আমি ব্যবহারকারীর ইনপুটটির জন্য অপেক্ষা করছি।
আমি জানি আমি c
একটি অস্থায়ী ফাইলে ফলাফল লিখতে পারি বা সম্ভবত কোনও ফিফো ব্যবহার করতে পারি bash
। (যদিও এফআইএফও সাহায্য করবে কিনা তা নিশ্চিত নয়।) অস্থায়ী ফাইলগুলি না করে কি এটি অর্জন করা সম্ভব sh
?
সম্পাদনা
সম্ভবত এটি যথেষ্ট হবে যদি আমি নির্ভরযোগ্য ফ্যাশনে c
(বা b
) প্রক্রিয়াটির প্রসেস আইডিটি জানতে পারি । তারপরে পুরো পাইপটি তাত্পর্যপূর্ণভাবে শুরু করা যেতে পারে এবং আমি কোনও প্রক্রিয়া আইডির জন্য অপেক্ষা করতে পারি। এর লাইন বরাবর কিছু
wait $(a | b | { c & [print PID of c] ; } | d)
সম্পাদনা ^ 2
আমি একটি সমাধান পেয়েছি, মন্তব্যগুলি (বা আরও ভাল সমাধান) স্বাগত।
d
এটি যখনই পছন্দ করে তখন c
শুরু করতে পারে তবে আমার এগিয়ে যাওয়ার আগে শেষ করা দরকার।
d
এটি যখন পছন্দ করতে শুরু করতে পারে তবে আপনি ঠিক কীটির জন্য অপেক্ষা করছেন?
d
এর আউটপুট ব্যবহার c
না করে d
তবে পাইপলাইনের অংশটি তৈরি করার কোনও ধারণা নেই বলে মনে হচ্ছে । তবে যদি d
ইনপুটটি ব্যবহার করে তবে d
অবশ্যই কোনও পার্থক্য করতে আপনার পদ্ধতির জন্য এটি সমস্ত পড়ার পরে তার ইনপুটটিতে কিছুক্ষণ কাজ করতে হবে।
d
প্রসেসিং শুরু করতে চান ? আপনি প্রতিটি আউটপুট লাইনের সাথে সাথে প্রক্রিয়া শুরু করতে চান না ?c
c
d