এই আদেশটি কেন একটি বিশাল আকারের ফাইল তৈরি করে?


19

আমি আজ কিছু সংযোজন অপারেশন নিয়ে পরীক্ষা-নিরীক্ষা করছিলাম এবং আমার কৌতূহল অনুসারে এটি চালিয়েছি (যেখানে file1.txt খালি ছিল না এবং file2.txt খালি ছিল):

$ cat file1.txt >> file2.txt >> file1.txt

আমি যখন এটি কিছুক্ষণ নিচ্ছি দেখেছি, এটি শেষ করতে আমি Ctrl+ টিপছি C। ততক্ষণে file1.txt আকারের কয়েকশ এমবি ছিল।

ফাইলের নাম স্যুইচিং একই প্রভাব তৈরি করে না; এই ক্রমে ফাইলগুলি কেবল তখনই অসীম পুনঃনির্দেশ ঘটে। ঠিক কি ঘটছে যে এই কারণ?

উত্তর:


24

আপনি catএকাধিক স্ট্যান্ডার্ডটি সেভাবে ব্যবহার করতে বলতে পারবেন না , শেষ পুনঃনির্দেশটি অগ্রাধিকার নেয় তাই:

cat file1.txt >> file2.txt >> file1.txt

সমান:

>> file2.txt ; cat file1.txt >> file1.txt

স্পষ্টতই ফাইল সিস্টেমটি পূরণ করে, উত্স ফাইলটি গন্তব্য হওয়ার কারণে এটি অনির্দিষ্টকালের জন্য বৃদ্ধি পায়, file1.txtএটি একবারে না পড়ার জন্য যথেষ্ট বড়।

বেশিরভাগ আধুনিক catবাস্তবায়নের ক্ষেত্রে পুনরাবৃত্তিটি সনাক্ত করা এবং গর্ভপাত বন্ধ করা উচিত:

সোলারিস বিড়াল:

cat: input/output files 'file1.txt' identical

Gnu বিড়াল:

cat: file1.txt: input file is output file

এগুলি যে কোনওভাবে বোকা বানানো যেতে পারে:

cat < file1.txt | cat | cat  >> file2.txt >> file1.txt

বিড়ালদের ব্যবহারের এত অযথা ব্যবহার নয় ...


19
এটাই অনেক বিড়াল, মিয়াও।
slm

2
আপনি আমার মাথা স্পিন করেছেন কিন্তু আপনি আমার প্রশ্নের উত্তর দিয়েছেন!
ম্যাট

7
এবং আমি যখন Google+ এ এ সম্পর্কে জিজ্ঞাসা করেছি (উত্তর পাইনি), এটি স্বয়ংক্রিয়ভাবে আমার পোস্টকে # ক্যাটিক এবং #
ম্যাট

3

আমি বাশ শেলের মধ্যে এটি পুনরুত্পাদন করতে সক্ষম হইনি:

# non-empty file1
$ echo 1 > file1.txt

$ cat file1.txt >> file2.txt >> file1.txt 
cat: file1.txt: input file is output file

1 দৈর্ঘ্য দিয়ে 1 ফাইল তৈরি হয় তবে আমি উপরের বার্তাটি পাই:

$ ls -l
total 4
-rw-rw-r-- 1 saml saml   2 Sep 10 19:35 file1.txt
-rw-rw-r-- 1 saml saml   0 Sep 10 19:35 file2.txt

@ Jlliagre এর উত্তরের ভিত্তিতে আমি নিশ্চিত করতে পারছি না যে আমি 2 টি ফাইল পাচ্ছি। এটি catবাস্তবায়নের উপর নির্ভরশীল হতে পারে ।

সম্পাদনা # 1

@ জেলিয়াগ্র্রে এই কোডটি দেখানোর জন্য তার উত্তর আপডেট করেছেন যা তিনি সমতুল্য হিসাবে বলেছেন:

>> file2.txt ; cat file1.txt >> file1.txt

তাই এখন আমি কেন জানি খালি পাচ্ছি file2.txt। এই স্বীকৃতি আইনী:

>> file2.txt

এবং একটি খালি ফাইল তৈরি করবে।


file1.txtশূন্যস্থান না দিয়ে আবার চেষ্টা করুন ।
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

@ গিলস - আমি কেবল এটি পুনরায় পড়েছি এবং এটি লক্ষ্য করেছি, আমার কি অন্যরকম কিছু দেখা উচিত, আমি এখনও ত্রুটিটি পেয়েছি? বা আপনি কি বলছেন যে খ / সি আমার উত্তরের উদাহরণটি ভুল? আমি উত্তরটি বিটিডাব্লু ঠিক করেছি।
slm

@ গিলস - এটি আপনার ডাউনটোট ছিল, না? এটি কি ঠিক কোনও নির্দিষ্ট বা উত্তরটির অভাবের জন্য?
slm

1
আপনার উত্তর কেন ভোট দেওয়া হয়েছে তা নিশ্চিত নন, উত্তর দেওয়ার আগে অভিজ্ঞতার জন্য +1, যা আমি নিজে করি নি ...
jlliagre

+1 টি; আপনার পরীক্ষার জন্য ধন্যবাদ! আমি পুনঃনির্দেশ এবং catআচরণ আরও ভাল বুঝতে শুরু করছি starting
ম্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.