"<& 3" এবং "সম্পন্ন <ফাইল 11 3 <ফাইল22" এর অর্থ কী?


16

আমার কাছে নিম্নলিখিত স্ক্রিপ্ট রয়েছে:

while read lineA && read lineB <&3
do
    echo "$lineA"
    echo "$lineB"
    echo
done < file11 3< file22

এই কোডটি ভাল কাজ করছে। তবে আমি এগুলি বুঝতে পারি না:

  • <&3
  • done < file11 3< file22

1
আপনি আমাদের ব্যাখ্যা করতে পারেন স্ক্রিপ্টটি কি করে? (আপনি বলছেন এটি
ম্যাথিউ

উত্তর:


22

স্ক্রিপ্ট দুটি ফাইল থেকে জোড়া স্ট্রিং পড়ছে। প্রতিটি পুনরাবৃত্তির, এটা একটি স্ট্রিং থেকে সার্চ file11মধ্যে lineA, এবং থেকে file22মধ্যে lineB। এটি কোনও ফাইলের শেষের মুখোমুখি হওয়া অবধি এটি করে। লুপের বডি দুটি স্ট্রিং এবং একটি ফাঁকা রেখা আউটপুট করে।

<file11" file11এই কমান্ডের মধ্যে স্ট্যান্ডার্ড ইনপুট থেকে সংযুক্ত / পুনর্নির্দেশ" এর অর্থ , যেখানে "এই কমান্ড" whileলুপ। এটিও লেখা যেতে পারত 0<file11

স্ট্যান্ডার্ড ইনপুট হ'ল ফাইল বর্ণনাকারী নম্বর 0.। ফাইল বর্ণনাকারী 1 এবং 2 স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটির স্ট্রিমের জন্য সংরক্ষিত।

এর 3<file22অর্থ " file22এই কমান্ডের জন্য 3 ফাইল বর্ণনাকারী সংযুক্ত করুন "। 3 নম্বরটি পরবর্তী "ফ্রি" ফাইল বর্ণনাকারী নম্বর হিসাবে দেখা যায়, তবে কোডটি 4, 5 বা 0, 1 এবং 2 ব্যতীত অন্য কোনও ছোট পূর্ণসংখ্যার ব্যবহার করতে পারে (ব্যবহারযোগ্য ফাইল বর্ণনাকারীর সংখ্যার সীমাটি শেলটি কী তার উপর নির্ভর করে ব্যবহৃত হচ্ছে, তবে 9 টি পর্যন্ত সংখ্যাগুলি কাজের গ্যারান্টিযুক্ত)।

লুপে, read lineAস্ট্যান্ডার্ড ইনপুট থেকে ডিফল্ট হিসাবে স্ট্রিং পড়বে, অর্থাত্ ফাইল থেকে file11(স্ট্যান্ডার্ড ইনপুটটি লুপ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়)। এটিও লেখা যেতে পারত read lineA <&0

এর সাথে read lineB <&3, readকমান্ডটি ফাইল বর্ণনাকারী 3, অর্থাত্ file22স্ট্যান্ডার্ড ইনপুট থেকে নয় , থেকে পাঠ করে (স্ট্যান্ডার্ড ইনপুট যেমন ফাইলের বর্ণনাকারী 3 পাওয়া যায়)।

সংক্ষেপে, এটি "একসাথে" দুটি ফাইল থেকে একসাথে পড়ার জন্য স্ট্যান্ডার্ড ইনপুট স্ট্রিম এবং একটি "অতিরিক্ত" ফাইল বর্ণনাকারী (সংখ্যা 3) ব্যবহার করে (প্রতিটি ফাইল থেকে একসময় স্ট্রিং) turn সাধারণত, কেবল একটির কাছে একটি ইনপুট স্ট্রিমের অ্যাক্সেস থাকে তবে এটি স্পষ্টভাবে দ্বিতীয় ইনপুট স্ট্রিম তৈরি করে এবং এটি file22ফাইলে সংযোগ স্থাপন করে এই বিধিনিষেধকে অতিক্রম করে ।

সম্পর্কিত:


আমি "লাইন" না দিয়ে উপরের "স্ট্রিং" শব্দটি ব্যবহার করি। দুটি ফাইল থেকে পড়া জিনিসগুলির স্বচ্ছ স্পেসগুলি বন্ধ করে দেওয়া হবে এবং কিছু পালানোর ক্রম বিশেষভাবে ব্যাখ্যা করা হবে।

ব্যবহার করে একটি লাইন পড়তে read, ব্যবহার করুন

IFS= read -r varname

সম্পর্কিত:


ভাল উত্তর! আমি যা বুঝতে পারি না তা হ'ল ফাইল ডেস্ক্রিপ্টর 3 কীভাবে ব্যবহার করা যায়। এর অর্থ কি 3<file22এইরকম fopenযেখানে যেখানে FIDপ্রত্যাবর্তন করা হয়নি তবে পূর্ব নির্দিষ্ট করে দেওয়া আছে?
এ। ডোন্ডা

2
@ এডন্ডা আপনি বর্ণনা করছেন fdopen()। হ্যাঁ.
কুসালানন্দ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.