শেলের মধ্যে `>` `<` `>>` এর আচরণ কী


0

আমি এই তিনটির ভিত্তি জানি। এবং cat < file > fileফাইলের বিষয়বস্তু পরিষ্কার করার কারণ । তবে আমি বুঝতে পারি না কেন cat < file >> fileদু'টি সময় লেখার পরিবর্তে, এটি লুপের সময় অন্তহীন সামগ্রীর মতো সামগ্রীকে সম্মতি দেয়।

উত্তর:


1

ঠিক আছে, আমার cat(কুবুন্টুতে) বলে input file is output fileএবং বেরিয়েছে। আমি বুঝতে পারি যে আপনার catমতো স্মার্ট নয় (বা অলস হিসাবে)।

আপনি যা পর্যবেক্ষণ করেন তা ব্যাখ্যা করা সহজ। catখণ্ডখণ্ডে পড়া এবং লেখেন। ধরুন প্রথম অংশটি ফাইলের (ইওএফ) শেষে পৌঁছেছে না এবং এর ফাইলগুলি একই ফাইলটির শেষে একত্রিত হয়ে গেছে। catকিছু পরিমাণ বাইটে পড়া আরও উন্নত হয়েছে তবে একই পরিমাণে ফাইলটি "চালিত হয়ে গেছে" এর সমাপ্তি। বস্তুতপক্ষে catযতদূর ফাইলের শেষে থেকে যেমন শুরুতে ছিল আবার। এবং এটা উপর এবং এবং উপর যায়।

যেন আপনি দৌড়ে এসেছেন এবং প্রতি 100 মিটারের জন্য আপনার কাছ থেকে 100 মিটার দূরে সমাপ্ত রেখাটি সরানো হয়েছিল। আপনি কখনই এটি পৌঁছাতে পারবেন না এবং ভ্রমণ করা দূরত্বটি কোনও প্রান্ত ছাড়াই বাড়বে।

মূল দূরত্বটি 100 মিটার বা তার কম না হলে। এই ক্ষেত্রে আপনি স্থান পরিবর্তন করার আগে শেষ লাইনে পৌঁছাতে পারবেন। ফাইলটি যথেষ্ট ছোট হলে অ্যানালোগালিভাবে শেষ cat হতে পারে তবে আমি সত্যিই এটিতে সন্দেহ করি। আমি cat"জানে" আশা করি এটি ইওএফ-তে কেবল তখনই পেল যখন এটি আবার পড়ার চেষ্টা করে এবং 0 বাইট পড়তে সক্ষম হয়, আর নেই। এর অর্থ এটি পূর্ববর্তী ধাপে ইওএফ অবধি ইতিমধ্যে পড়েছে, যখন এটি 0 বাইটের বেশি পড়বে read তবে আপনার ক্ষেত্রে যদি এটি পূর্ববর্তী ধাপে 0 বাইটের বেশি পড়ে, তবে ফাইলটি তাত্ক্ষণিকভাবে বৃদ্ধি পেয়েছিল এবং এখনও পড়ার মতো ডেটা রয়েছে।

আমি দুটি ক্ষেত্রে পূর্বাভাস দিচ্ছি যাতে আপনার catথামবে:

  • যখন ফাইলটি ফাঁকা থাকে (0 বাইট দীর্ঘ)
  • যখন ফাইলটি বিদ্যমান নেই এবং আপনি পুনঃনির্দেশের ক্রমটি পরিবর্তন করেন (অর্থাত্ cat >> file < fileকাজ করবে, cat < file >> fileএকটি ত্রুটি নিক্ষেপ করবে; এটি কারণ বাম থেকে ডানে "পুনর্নির্দেশগুলি" সরবরাহ করা হয় >>, <প্রয়োজনে ফাইল তৈরি করে, ফাইলটির উপস্থিতি প্রয়োজন )।

সাধারণভাবে একটি একক কমান্ডে স্টিডিন এবং স্টডআউট (বা / এবং স্ট্ডার) পুনঃনির্দেশ সহ একই ফাইলটি ব্যবহার করার জন্য সমস্যা জিজ্ঞাসা করছে। তবুও, যদি আপনার এটি করার প্রয়োজন হয় তবে spongeইউটিলিটি রয়েছে (যেমন moreutilsউবুন্টু, দেবিয়ানের প্যাকেজে)।

spongeস্ট্যান্ডার্ড ইনপুট পড়ে এবং নির্দিষ্ট ফাইলটিতে এটি লিখে দেয়। একটি শেল পুনর্নির্দেশের বিপরীতে, স্পঞ্জ আউটপুট ফাইল খোলার আগে তার সমস্ত ইনপুট আপ করে তোলে। এটি সঙ্কলিত পাইপলাইনগুলিকে অনুমতি দেয় যা একই ফাইল থেকে পড়ে এবং লেখতে পারে।

যদি কোনও আউটপুট ফাইল নির্দিষ্ট না spongeকরা থাকে তবে স্টডআউটে আউটপুট দেয়।

পরিবর্তে cat < file >> fileরান sponge < file >> file। এটি আপনার কাছ থেকে যা প্রত্যাশা করেছিল তা করবে cat(যতক্ষণ না ফাইল ভিজিয়ে দেওয়ার সময় আপনার সংস্থানগুলি অপসারণের জন্য যথেষ্ট পরিমাণে না থাকে, আমি মনে করি)।

আরেকটি উপায় < file cat | cat >> file। দুই-এর মধ্যে বাফারিংয়ের কারণে catপ্রথমটি সত্যিই ইওএফ-তে আঘাত করবে এবং দ্বিতীয়টি ফাইলটি প্রসারিত করার আগে প্রস্থান করবে, যদি ফাইলটি যথেষ্ট পরিমাণে ছোট থাকে । একটি ছোট (তবে খালি নয়) ফাইল দিয়ে শুরু করে এই কমান্ডটি কয়েকবার পুনরাবৃত্তি করুন এবং ফাইলটি শেষ পর্যন্ত কমান্ডটিকে আপনার মূল কমান্ডের সাথে আচরণ করার জন্য যথেষ্ট বড় হবে cat। নোটটি < file cat | unbuffer cat >> fileবাফার থেকে মুক্তি পায় এবং খুব ছোট ফাইলের জন্য লুপ করে।


এর অর্থ কি যদি আমার কাছে এমন ফাইল থাকে যা অন্তহীন এবং শেষ অবধি মেমরির চেয়ে বড় হয় তবে যতই ধীরে ধীরে ডেটা আসে না কেন, এটি ইওএফ না লিখলে catএটি সঠিকভাবে পরিচালনা করবে কারণ এটি ইওএফ পর্যন্ত প্রতিটি ট্রাঙ্ক লোড করে।
টাইনা

@ টিইনা আপনার কাছে যদি কোনও ডেটা স্ট্রিম ধীরে ধীরে আগত হয় তবে catঅপেক্ষা করতে হবে। পর্যবেক্ষণ করা খুব সহজ: কেবল চালান cat, এটি আপনার ইনপুটটির জন্য অপেক্ষা করবে। কয়েকটি লাইন টাইপ করুন, তারপরে এটি আবার অপেক্ষা করবে। একটি সিগন্যাল প্রেরণে Ctrl + D চাপুন যা ইওএফ পৌঁছেছে এমন ব্যাখ্যা করা হবে।
কামিল ম্যাকিয়েরোভস্কি

0

ভাল, মূলত এটি নিম্নলিখিত হিসাবে কাজ করে:

>কোনও ফাইলের বিষয়বস্তুকে ওভাররাইড করতে ব্যবহৃত হয়। উদাহরণ: echo "HELLO WORLD" > file.txt

>>কোনও ফাইলে বিষয়বস্তু সংযোজন করতে ব্যবহৃত হয়। উদাহরণ: echo "New line" >> file.txt

<আপনি কোনও ফাইল ইনপুট হিসাবে ব্যবহার করতে পারেন এবং অন্য কোনও ফাইলে পুনর্নির্দেশ করতে পারেন। উদাহরণ: cat < file.txt > file2.txt। একটি ব্যবহারিক উদাহরণ হ'ল ftp myftpbox.com < commands.txtএটি কোনও এফটিপিতে সংযোগ স্থাপন করবে এবং ফাইলটিতে কমান্ডের একটি তালিকা কার্যকর করবে commands.txt

দ্রষ্টব্য: আপনি যখন ব্যবহার করবেন তখন সতর্ক থাকুন >কারণ আপনি কোনও নিশ্চিতকরণ ছাড়াই কোনও বিদ্যমান ফাইলকে ওভাররাইড করতে পারেন, আপনি এটি চালিয়ে পরিবর্তন করতে পারেন set -o noclobber

আশা করি এটা কাজে লাগবে.


-1। যদিও ওপি "এই তিনটির ভিত্তি আমি জানি" সত্ত্বেও, আপনার উত্তরটি ভিত্তি দেয় (ভাল, set -o noclobberসেই ভিত্তির বাইরে, মঞ্জুর)। আরো কি গুরুত্বপূর্ণ, আপনি বাস্তব সমস্যা সুরাহা হয়নি আদৌ
কামিল ম্যাকিয়েরোভস্কি

@KamilMaciorowski +1 টি effor জন্য> <।
Tiina

আমি অনুমান করি গত রাতে আমি ভুল বুঝেছি। আপনার প্রতিক্রিয়া এখানে সত্যিই প্রশংসা করা হয়। ধন্যবাদ
ম্যানুয়েল ফ্লোরিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.