শেলটি আসলে পাইপড কমান্ডগুলি কীভাবে বাস্তবায়িত করে তা সম্পর্কে আমি সত্যিই কখনও চিন্তা করিনি। পাইপ সম্পর্কে চিন্তাভাবনার উপায় হিসাবে আমাকে সর্বদা বলা হয়েছে যে "একটি প্রোগ্রামের স্টাডআউট অন্যটির স্টিডিনে পাইপ হয়"। খুব স্বাভাবিকভাবেই, আমি ভেবেছিলাম যে বলার ক্ষেত্রে, এ | বি, এ প্রথমে চলবে, তারপরে বি এ এর স্টাডআউট পাবে এবং তার ইনপুট হিসাবে এ এর স্ট্ডআউটকে ব্যবহার করবে।
তবে আমি লক্ষ্য করেছি যে লোকেরা যখন পিএস-তে একটি বিশেষ প্রক্রিয়া অনুসন্ধান করে, তখন তারা কমান্ডের শেষে গ্রেপ-ভি "গ্রেপ" অন্তর্ভুক্ত করবে তা নিশ্চিত করার জন্য যে গ্রেপ চূড়ান্ত আউটপুটে প্রদর্শিত না হয়। এর অর্থ পিএক্স অক্স | গ্রেপ "বাশ" | গ্রেপ-ভি "গ্রেপ", যার অর্থ পিএস জানত যে গ্রেপ চলছে এবং তাই পিএস এর আউটপুটে রয়েছে। তবে যদি পিএস এর আউটপুট গ্রেপ-তে পাইপ হওয়ার আগেই শেষ হয়, তবে কীভাবে জানবেন যে গ্রেপ চলছে?
flamingtoast@FTOAST-UBUNTU: ~$ ps | grep ".*"
PID TTY TIME CMD
3773 pts/0 00:00:00 bash
3784 pts/0 00:00:00 ps
3785 pts/0 00:00:00 grep