আমি একটি টিউটোরিয়াল দিয়ে কাজ করছি এবং উভয় cat myfile.txt
এবং এর ব্যবহার দেখেছি cat < myfile.txt
। কমান্ডের এই দুটি ক্রম মধ্যে পার্থক্য আছে? মনে হয় উভয়ই শেলের জন্য একটি ফাইলের বিষয়বস্তু মুদ্রণ করে।
আমি একটি টিউটোরিয়াল দিয়ে কাজ করছি এবং উভয় cat myfile.txt
এবং এর ব্যবহার দেখেছি cat < myfile.txt
। কমান্ডের এই দুটি ক্রম মধ্যে পার্থক্য আছে? মনে হয় উভয়ই শেলের জন্য একটি ফাইলের বিষয়বস্তু মুদ্রণ করে।
উত্তর:
প্রথম ক্ষেত্রে, cat
ফাইলটি খোলে এবং দ্বিতীয় ক্ষেত্রে শেলটি ফাইলটি খোলার জন্য এটি cat
স্ট্যান্ডার্ড ইনপুট হিসাবে প্রেরণ করে ।
প্রযুক্তিগতভাবে, তাদের বিভিন্ন প্রভাব থাকতে পারে। উদাহরণস্বরূপ, cat
প্রোগ্রামের চেয়ে বেশি (বা কম) সুবিধাযুক্ত শেল প্রয়োগ সম্ভব হবে । এই দৃশ্যের জন্য, কেউ ফাইলটি খুলতে ব্যর্থ হতে পারে, অন্যটি পারে।
এটি সাধারণ দৃশ্য নয়, তবে শেল এবং cat
একই প্রোগ্রাম নয় বলে উল্লেখ করার জন্য ।
sudo cat myfile.txt
। তবে sudo cat < myfile.txt
আপনার যদি ফাইলটি পড়ার অধিকার না থাকে তবে কাজ করবে না।
ksh93
করেছেন cat
builtin (ডিফল্টভাবে সক্রিয় না যদি না আপনি /opt/ast/bin
আপনার প্রথম দিকে $PATH
যদিও)।
wc
কোনও আর্গুমেন্ট দেওয়ার পরে গণনা করার আগে ফাইলের নাম মুদ্রণ করা হবে।
আপনার পরীক্ষার ক্ষেত্রে কোনও বড় দৃশ্যমান পার্থক্য নেই। সর্বাধিক সুস্পষ্ট একটি হ'ল myfile.txt
বর্তমান ডিরেক্টরিতে কোনও ফাইলের নাম না থাকলে বা আপনাকে এটি পড়ার অনুমতি না দেওয়া থাকলে আপনি পেয়েছেন এমন ত্রুটি বার্তা ।
পূর্ববর্তী ক্ষেত্রে, cat
অভিযোগ করবে এবং পরবর্তী ক্ষেত্রে, আপনার শেলটি পরিষ্কারভাবে দেখাবে যে কোন প্রক্রিয়াটি ফাইলটি খোলার চেষ্টা করছে, cat
পূর্বের একটিতে এবং শেলের পরে ter
$ cat myfile.txt
cat: myfile.txt: No such file or directory
$ cat < myfile.txt
ksh93: myfile.txt: cannot open [No such file or directory]
আরও সাধারণ ক্ষেত্রে, পুনর্নির্দেশগুলি ব্যবহার করে একটি বড় পার্থক্য একাধিক ফাইলের বিষয়বস্তু মুদ্রণের জন্য ব্যবহার করা যায় না, যা cat
(যেমন বিড়াল এনিয়েট) কমান্ডের সমস্ত মূল উদ্দেশ্য পরে । নোট করুন যে শেলটি যাইহোক যাইহোক সমস্ত ফাইলকে পুনঃনির্দেশিত ইনপুট হিসাবে খোলার চেষ্টা করবে, তবে আপনি কেবল এবং এটির "zshism" cat
ব্যবহার না করে কেবল শেষটিকে পাস করবেন।zsh
multios
$ echo one > one
$ echo two > two
$ cat one two # cat opens one, shows one, opens two, shows two
one
two
$ cat < one < two # sh opens one then opens two, cat shows stdin (two)
two
$ rm one two
$ echo one > one
$ cat one two # cat opens and shows one, fails to open two
one
cat: two: No such file or directory
$ cat < one < two # the shell opens one then opens two, fails and
# displays an error message, cat gets nothing on stdin
# so shows nothing
ksh93: two: cannot open [No such file or directory]
একটি স্ট্যান্ডার্ড সিস্টেমে শেল এবং cat
ফাইল অ্যাক্সেস অধিকারে কোনও পার্থক্য নেই তাই উভয়ই সমানভাবে ব্যর্থ হতে সক্ষম হবে। থমাস ডিকি উত্তর এবং সংযুক্ত মন্তব্য ইতিমধ্যে প্রস্তাবিত হিসাবে, বিশেষাধিকার sudo
বাড়াতে ব্যবহার cat
আচরণে একটি বড় পার্থক্য তৈরি করবে।
ksh
নিজের বিচ্ছিন্নতার ব্যবহার ব্যবহার করেন এবং যদি তাই হয় ... কেন ?
bash
, ksh93
অনেক দূরে ভাল শেল হয়। এটা শেল প্রায়।
cat < file1 > file2
করেছেন , অপঠনযোগ্য বা অস্তিত্বহীন cat file1 > file2
ক্ষেত্রে এর থেকে খুব আলাদা প্রভাব রয়েছে file1
। (পরবর্তী ফর্মটি কেটে গেছে file2
; পূর্বেরটি তা করবে না))
cat myfile.txt
ফাইলটি পড়ে myfile.txt
তারপরে স্ট্যান্ডার্ড আউটপুটে প্রিন্ট করে।
cat < myfile.txt
এখানে cat
খোলার জন্য কোনও ফাইল (গুলি) দেওয়া হয়নি, অনেকগুলি ইউনিক্স কমান্ডের মতো- স্ট্যান্ডার্ড ইনপুট থেকে ডেটা পড়ে, যা সেখান থেকে নির্দেশিত হয় file.txt
এবং স্ট্যান্ডার্ড আউটপুট প্রিন্ট করে।
@ থমাস ডিকির উত্তরটি দুর্দান্ত।
আমি কেবল কয়েকটি ফাইল পড়ার ক্ষেত্রে কিছু স্পষ্ট তথ্য যুক্ত করতে চাই (আপনার প্রশ্নের সাথে আলগাভাবে সম্পর্কিত তবে এখনও):
cat <file1 <file2 <file3
কমপক্ষে ব্যাশে কেবল ফাইল 3 পড়বে। (প্রকৃতপক্ষে, এটি শেলের উপর নির্ভর করে, তবে বেশিরভাগ শেল স্ট্যান্ডিনে প্রতিটি নির্দিষ্ট ফাইল ডুপ করে দেবে, যার ফলে শেষটি কার্যকর হয়))cat file1 file2 file3
সব নির্দিষ্ট ফাইল ক্রমানুসারে পড়তে হবে (আসলে বিড়াল শব্দের ফর্ম কমান হয় CONCATENATE )।cat file1 file2 file3 <file4 <file5 <file6
কেবল ফাইল 1, ফাইল 2, ফাইল 3 পড়বে (যখন ফাইলের যুক্তিগুলি পাস করার সময় বিড়াল স্টিডিনকে উপেক্ষা করে)।
cat file1 file2 - file3 <file4 <file5 <file6
ফাইল 1, ফাইল 2, ফাইল 6, ফাইল 3 পড়বে (হাইফেনকে বিড়াল স্টিডিনকে উপেক্ষা করতে বাধ্য করা হিসাবে)।এবং ত্রুটি সম্পর্কে। আর্গুমেন্ট (ব্যতীত ) হিসাবে নির্দিষ্ট কিছু ফাইল খোলার অক্ষমতার ক্ষেত্রে <
, বিড়াল ব্যর্থ ফাইলগুলি এড়িয়ে যাবে (স্ট্যাডারে প্রাসঙ্গিক বার্তা আউটপুট সহ), তবে এখনও অন্য ফাইলগুলি পড়বে। পুনর্নির্দেশ হিসাবে চিহ্নিত ফাইলগুলির কমপক্ষে একটি খুলতে অক্ষমতার ক্ষেত্রে (সহ <
), শেল এমনকি বিড়াল শুরু করবে না (এটি আসলে বিড়ালের দ্বারা ব্যবহৃত না এমন পুনর্নির্দেশগুলির জন্যও ঘটে)। উভয় ক্ষেত্রে ভ্রান্ত প্রস্থান কোডটি ফিরে আসবে।
cat
তা সত্ত্বেও খুলবে file1
এবং file2
সঙ্গে একই file4
এবং file5
আপনার তৃতীয় উদাহরণে। এটি কেবল প্রদর্শন করা হবে file3
, শ্রদ্ধা। file6
পূর্ববর্তী ওপেন নির্দেশাবলী সফল হলে বিষয়বস্তু।
এর মধ্যে পার্থক্যটি লক্ষ্য করার জন্য আমরা অন্য একটি কমান্ড ব্যবহার করতে পারি:
wc –w food2.txt
।
সম্ভাব্য আউটপুট:
6 food2.txt
।
কমান্ড ফাইলের নামটি জানায় যেহেতু এটি জানে (আর্গুমেন্ট হিসাবে পাস হয়েছে)।
wc –w < food2.txt
।
সম্ভাব্য আউটপুট:
6
।
স্ট্যান্ডার্ড ইনপুটটি ফিড 2.txt ফাইল করে পুনর্নির্দেশ করা হয়েছে এটি সম্পর্কে কমান্ড ছাড়াই।