কীভাবে `>` এবং `>>` কাজ করে?


9

আমি revএকটি ফাইল চেষ্টা করেছিলাম এবং তারপরে এটি পাইপ করেছিলাম cat > same_fileতবে এটি একটি ফাঁকা ফাইলে পরিণত হচ্ছে।

আমি চেষ্টা করেছিলাম rev file.txt | cat > file2.txt && mv file.txt file2.txt;এটি কাজ করে।

এমনকি rev file.txt | cat >> file.txt;কাজ করেছেন।

কিন্তু আমি চেষ্টা করেছিলাম যখন rev file.txt | cat > file.txtএটি ব্যর্থ।


এছাড়াও আপনি চলে যাবে catভালো আউট: rev file.txt > file2.txt && mv file2.txt file.txt। এটি একটি অতিমাত্রায় ব্যবহারcat । এটিকে ফেলে রেখে আপনি একটি অতিরিক্ত প্রক্রিয়া চালিয়ে যান।
মেটেগা

উত্তর:


19

(> এবং >>) পুনঃনির্দেশের উভয় পদ্ধতির মধ্যে এই ক্ষেত্রে আপনার যে বিষয়টি বুঝতে হবে তা হ'ল:

>

পুনঃনির্দেশ এবং তথ্য যেখানে এটি নির্দেশিত হয়েছিল ওভাররাইট করে। পাইপ "|" এর মাধ্যমে কোনও তথ্য পাওয়ার সময় এমনটি ঘটে

>>

এটি নির্দেশিত তথ্যগুলিতে পুনঃনির্দেশ এবং কনটেটেট করে। পাইপ "|" এর মাধ্যমে কোনও তথ্য পাওয়ার সময় এমনটি ঘটে

উভয় ক্ষেত্রেই যদি ফাইলটি না থাকে তবে এটি পরিবর্তে তৈরি করা হবে। আপনি যদি একই ফাইলটিতে আবার চালনা করেন তবে কেবল ">>" তে তথ্য সংযুক্ত হবে। ">" দিয়ে আপনি প্রথম রান করে যা কিছু করেছিলেন তা কেবল ওভাররাইট করে ফেলবেন।

তবে আউটপুট ফাইলের মতো একই ইনপুট ফাইলটি ব্যবহার করার সময় এখানে ডিল হয়। সেই নির্দিষ্ট ক্ষেত্রে, আপনি ">" ব্যবহার করলে আপনি "ইনপুট" অংশটি পার্স করার প্রয়োজনীয় তথ্য সরিয়ে ফেলবেন, যেহেতু আউটপুট ফাইলটি "এটি ওভাররাইট করা" হবে। সুতরাং:

rev file.txt | cat > file.txt

"ধীর গতির ব্যাখ্যা" তে আসলে যা ঘটছে তা হ'ল:

  1. revএর সামগ্রীটি বিপরীত করতে file.txtএবং পাইপে প্রেরণের জন্য প্রস্তুত করে
  2. revপাইপে তথ্য প্রেরণ করার সময় পাইপ এটিকে সরাসরি প্রবাহিত করে cat
  3. catতথ্য প্রাপ্তির সময় এটি স্বয়ংক্রিয়ভাবে file.txtএটি সেট হয়ে যাওয়ার সাথে এটি প্রয়োগ করবে ।
  4. এখানে মূলশব্দটি "যখন", কারণ একইসাথে সবকিছু ঘটছে। এই অংশে আরও গভীর ধারণা পেতে দয়া করে এমিলের নীচে দুর্দান্ত মন্তব্যগুলি দেখুন।
  5. catrevপুরো ফাইলটি পাইপ করার জন্য অপেক্ষা করবে না । এটি কেবলমাত্র তথ্যের প্রথম অংশটি তার মিনিটের মিনিটে শুরু হবে, যার অর্থ, আপনি কোন চিহ্ন ব্যবহার করেছেন তার উপর নির্ভর করে এটি এর সাথে একটি সংযোগ খুলবে file.txt
  6. এই ক্ষেত্রে যেহেতু আপনি ব্যবহৃত > পরিবর্তে >> , শেল আউটপুট ফাইল যার মানে এটা খুলবে অগ্রভাগ ছাঁটিয়া হবে এবং পরিষ্কার তথ্য file.txtনতুন তথ্য জন্য অপেক্ষা এটি পেতে হয়। এর সাথে >> এর সাথে এটি একটি সংযোগ খুলবে file.txtএবং সনাক্ত করা শেষ লাইনে নতুন তথ্যের জন্য অপেক্ষা করবে।
  7. যেহেতু তথ্যটি ইতিমধ্যে > এর file.txtসাথে সাফ হয়ে গেছে , কাজটি করার চেষ্টা করবে এবং কিছুই পাবে না কারণ নতুন তথ্যের প্রস্তুতিতে সমস্ত কিছু মুছে ফেলা হয়েছে।revcat

তাহলে উপরেরটি পড়ে অন্যরা কেন কাজ করবেন? এর জন্য:

rev file.txt | cat > file2.txt && mv file.txt file2.txt

এখানে আপনি বিড়ালকে পাইপ দিচ্ছেন যা অন্য কোনও ফাইলে তথ্য প্রেরণ করছে । এই ক্ষেত্রে, প্রক্রিয়াজাত ইনপুট ফাইল file.txtআউটপুট ফাইলের মতো নয় file2.txt। এর পরে আপনি আক্ষরিকভাবে পুরোটির উপরে ওভাররাইট file2.txtকরছেন file.txt, সুতরাং তৈরি করা সমস্ত প্রক্রিয়া catমুছে ফেলা হয়েছিল। মূলত পুরো লাইনটিকে সরলীকৃত করা যেতে পারে cp file.txt file2.txtকারণ এটি একই কাজ করছে যেহেতু file2.txtশেষে কমান্ডটি হারিয়ে ফেলে revএবং ওভাররাইট করা হয় mv

rev file.txt | cat >> file.txt

এই ক্ষেত্রে আপনি হয় concatenating একই ফাইলে তথ্য। সুতরাং এটি কেবলমাত্র সেই ফাইলটির সাথে একটি সংযোগ খুলছে তবে কোনও একক > এর সাথে দেখা তথ্য মোছা হচ্ছে না । শেষ ফলাফলটি হওয়া উচিত, মূল তথ্য এবং বিপরীত তথ্য।


5
ফাইলটি বিড়াল দ্বারা কাটা হয়নি। পাইপলাইনের কোনও কমান্ড এমনকি শুরুর আগে শেল দিয়ে এটি কেটে নেওয়া হয় ।
এমিল জেবেক

সঠিক, ব্যাখ্যা করার জন্য সহজ শব্দগুলির সন্ধান করছিল। যেহেতু এটি ব্যাখ্যা করা কিছুটা কঠিন কারণ ওপি এটি কী শেল এবং এটি সমস্ত কি না জানে। এটি যতটা সম্ভব "বান্ধব" করার চেষ্টা করছেন।
লুইস আলভারাদো

1
ঠিক আছে, এটি শেল দ্বারা সম্পন্ন হয়েছে তা আসলে ব্যাপার নয়, তবে আপনি যে সময়টি উপস্থাপন করছেন তা ভুল। ছাঁটাইটি step ধাপে ঘটবে না, তবে ০ য় ধাপে rev file.txt | cat --bogus-option > file.txtফাইলটি কেটে ফেলবে, যদিও বিড়াল এটি খোলার চেষ্টা করবে না।
এমিল জেবেক

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

4
আরও ইনটুলসও দেখুন , সরঞ্জামগুলির দুর্দান্ত সংগ্রহ (যেমন প্যাকেজ সংগ্রহস্থল থেকে পাওয়া যায় moreutils) যার মধ্যে অন্তর্ভুক্ত রয়েছে sponge, একটি সরঞ্জাম যা একটি ইনপুট ফাইলকে ওভার রাইটিংয়ের ব্যবহারের জন্য বিশেষভাবে তৈরি করা হয়েছে। উদাহরণস্বরূপ, কার্যকার্যটি rev file.txt >file2.txt && mv file2.txt file.txtহয়ে উঠবে rev file.txt | sponge file.txt, যা ইতিমধ্যে কিছু নাম থাকা সত্ত্বেও সঠিকভাবে কাজ করবে file2.txt
ড্যানিয়েল ওয়াগনার

9

শেলটি পুনঃনির্দেশটি দেখলে, জড়িত কোনও কমান্ড কার্যকর করার আগে এটি প্রথমে প্রাসঙ্গিক ফাইলগুলি খুলবে। সুতরাং, আপনি যখন করবেন:

foo file.txt | bar > file.txt

পুনর্নির্দেশটি চালিত হওয়ার আগে এটি file.txtকেটে ফেলা হয় এবং পড়তে পারে । পার্শ্ব নোটে, এ কারণেই আপনি করতে পারবেন না: foofile.txt

sed 'blah' file.txt > file.txt

এবং কেন sedইন-প্লেস এডিটিং বিকল্প রয়েছে।

শেষ অবধি, করছেন:

.. | cat > file.txt

হয় বিড়াল একটি নিষ্প্রয়োজন ব্যবহার , বিশেষ করে তাই যদি আপনি থেকে পড়তে চেষ্টা করছেন file.txtউপর আগে।

যদি আপনি জায়গায় কোনও ফাইল উল্টাতে চান তবে কোনও শর্টকাট নেই । আপনি জায়গা sedবা awkস্থান সম্পাদনা সহ কৌশলগুলি ব্যবহার করতে পারবেন ।


3

>রিডাইরেক্টর (অপারেটর) অন্য কোনও কিছুতে আউটপুট প্রেরণ করছে
(পরবর্তী কমান্ডের ইনপুট, প্রিন্টার ..)

আপনার ক্ষেত্রে আউটপুট কোনও ফাইলে যায় file.txt, যদি এই ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে এটি ওভাররাইট করা হয়, যদি এটি তৈরি না হয়।

>>একটি file.txtঅ্যাপেন্ড অপারেটর, যদি ইতিমধ্যে উপস্থিত থাকে তবে আউটপুটটি ফাইলের শেষে যুক্ত হয়। যদি ফাইলটি বিদ্যমান না থাকে তবে এটি তৈরি করা হবে এবং আউটপুট নতুন ফাইলে লেখা হবে >(রিডাইরেক্টর) এর মতো same


ওপি এটি বুঝতে পেরেছে বলে মনে হয়। বিভ্রান্তির একই ফাইল উভয় পক্ষের হওয়া থেকে শুধুমাত্র ডাঁটা বলে মনে হয় >এবং >>অপারেটর।
bzlm

0

আপনি প্রাক্তন মোডে ভিম ব্যবহার করতে পারেন:

ex -sc '%!rev' -cx file.txt
  1. % সমস্ত লাইন নির্বাচন করুন

  2. ! আপনার আদেশ প্রদান করুন

  3. x সংরক্ষণ করেন এবং বন্ধ করেন

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