Zsh এ, বিড়াল <(বিড়াল) বনাম বিড়ালের মধ্যে পার্থক্য বিড়াল বনাম বিড়াল = (বিড়াল)?


18

আমি প্রত্যাশা করেছি cat <(cat)এবং cat | catএকই কাজ করব: স্টিডিন থেকে স্টাডাউটের লাইনগুলি অনুলিপি করুন। আমার বোধগম্যতা ছিল যে উভয়ই catএকটি সাবশেলের মাধ্যমে একটি সম্পাদন করবে, সাবসেলের স্টাডাউটটিকে catএকটি অস্থায়ী নামযুক্ত পাইপে পুনর্নির্দেশ করবে এবং তারপরে catপাইপের দিকে পুনঃনির্দেশিত স্ট্যান্ডিনের সাহায্যে বর্তমান শেলটিতে অন্য একটিকে কার্যকর করবে।

পরিবর্তে, cat <(cat)আমাকে আমার টার্মিনালে টাইপ করতে দিন, তবে কোনও ইনপুট লাইনই অনুলিপি পেতে এবং ^Dসিগন্যাল করতে ব্যর্থ হয় EOF; cat | catযদিও প্রত্যাশিত হিসাবে কাজ করে।

আরও একটি পরীক্ষা হিসাবে, আমি পরীক্ষা করেছিলাম cat =(cat)যে একইরকম অসুবিধা আছে কি না cat <(cat), তবে এটি আমার প্রত্যাশা অনুযায়ী কাজ করে: স্ট্যান্ডিনের সমস্ত একসাথে স্টাডআউটে ^Dঅনুলিপি করে।

কেউ কি আমাকে বুঝতে সাহায্য করতে পারে যে zsh হুডের নীচে কী করছে?

উত্তর:


23
  1. a | bসংযোগ স্থাপন করে STDOUTথেকে aএবং STDINথেকে bব্যবহার করে মাত্র dup/dup2। উভয় কমান্ড সমান্তরালভাবে কার্যকর করা হয়।

  2. a =(b)aএকটি অস্থায়ী ফাইল নাম দিয়ে যুক্তিটি প্রতিস্থাপন করে । অস্থায়ী ফাইল তৈরি করার আগে এটি bকার্যকর করার আগে এটি কার্যকর aকরা হবেa

  3. a <(b)aনামযুক্ত পাইপের সাহায্যে যুক্তিটি প্রতিস্থাপন করে । aএবং bসমান্তরালভাবে চালানো। এটি এখন যেখানে এটি কিছুটা জটিল হয়ে ওঠে:

    The bব্যাকগ্রাউন্ডে রয়েছে এবং টার্মিনাল থেকে পড়তে পারে না। strace -p $PIDপ্রক্রিয়াটি দেখতে আপনার দ্বিতীয় বিড়াল প্রক্রিয়াটির সাথে সংযুক্ত করে আপনি নিজে এটি পরীক্ষা করতে পারেন।

    Meantime এর aমধ্যে নাম দেওয়া পাইপ থেকে পড়ার চেষ্টা করে তবে কিছু bপড়তে পারে না যেমন পড়তে পারে না।

    • এর অর্থ হল আপনার মূলত একটি অচলাবস্থা রয়েছে যেখানে aথেকে পড়ার চেষ্টা করে bতবে সেখান থেকে পড়তে bপারে না STDINএবং লিখতেও পারে নাa

ম্যান বাশ থেকে পটভূমি প্রক্রিয়া এবং টার্মিনাল সম্পর্কে আরও তথ্য :

কাজের নিয়ন্ত্রণে ইউজার ইন্টারফেস প্রয়োগের সুবিধার্থে, অপারেটিং সিস্টেমটি একটি বর্তমান টার্মিনাল প্রক্রিয়া গ্রুপ আইডির ধারণা বজায় রাখে । এই প্রক্রিয়া গোষ্ঠীর সদস্যরা (প্রসেস গ্রুপের আইডি বর্তমান টার্মিনাল প্রক্রিয়া গ্রুপ আইডির সমান) কীবোর্ড-উত্পাদিত সিগন্যাল যেমন SIGINT পান । এই প্রক্রিয়াগুলি অগ্রভাগে রয়েছে বলে জানা যায় । পটভূমিপ্রক্রিয়াগুলি হ'ল যাদের প্রসেস গ্রুপ আইডি টার্মিনালের থেকে পৃথক; এই জাতীয় প্রক্রিয়াগুলি কীবোর্ড-উত্পাদিত সিগন্যালের প্রতিরোধক। কেবল অগ্রভাগ প্রক্রিয়াগুলি থেকে পড়ার অনুমতি দেওয়া হয় বা যদি ব্যবহারকারী স্টটি টুস্টপ দিয়ে নির্দিষ্ট করে থাকে তবে টার্মিনালে লিখুন। পটভূমি প্রক্রিয়াগুলি যা স্টাটি টুস্টপ কার্যকর হওয়ার সময় লিখতে চেষ্টা করে টার্মিনালটি কার্নেলের টার্মিনাল ড্রাইভার দ্বারা একটি সিগটিন (সিগটু) সিগন্যাল প্রেরণ করা হয়, যা ধরা না পড়লে প্রক্রিয়াটি স্থগিত করে।


দুর্দান্ত, আপনাকে ধন্যবাদ - এটি অনেক পরিষ্কার হয়েছে!
অ্যালান ও'ডনেল

1
ইন্টারেক্টিভ না হলে নোট করুন, zsh এর মানক ইনপুটটিকে পুনঃনির্দেশ করে ব্যাকগ্রাউন্ড কমান্ডগুলির (এতে অন্তর্ভুক্ত সহ <(cmd))/dev/null , যাতে আচরণটি পৃথক হয় ( zsh -c 'cat <(cat)'তত্ক্ষণাত্ ফিরে আসে এবং কিছুই আউটপুট দেয় না)।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.