ধরুন আমার কাছে নিম্নলিখিত পাইপ রয়েছে:
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প্রসেসিং শুরু করতে চান ? আপনি প্রতিটি আউটপুট লাইনের সাথে সাথে প্রক্রিয়া শুরু করতে চান না ?ccd