একটি নতুন ফাইল তৈরিতে "টাচ ফাইল" এবং "> ফাইল" ব্যবহার করার পার্থক্য কী?


13

আমি লিনাক্সে নতুন। আমি যখন বাশ ব্যবহার করে বর্তমান ডিরেক্টরি অধীনে একটি নতুন ফাইল .gitignore তৈরি করি তখন আমি জানতে পারি যে আমি এটি করতে পারি:

> .gitignore

অথবা

touch .gitignore

দেখে মনে হচ্ছে তারা একই কাজ করে। আমি যখন ম্যানুয়ালটির জন্য যাচাই করি touch, এটি বর্তমান ফাইলের টাইমস্ট্যাম্প পরিবর্তন করে বলে, তবে এর জন্য কোনও ম্যানুয়াল নেই >। সুতরাং কেউ কি করতে >পারে তা ব্যাখ্যা করতে পারে এবং এই প্রসঙ্গে এই দুটি কমান্ড ব্যবহার করার মধ্যে কোনও পার্থক্য রয়েছে কি? ধন্যবাদ।


1
আমি আগ্রহী যেখানে আপনি '>' ফাইলের জেনারেটর হিসাবে এর উদ্দেশ্য ব্যবহার না শিখে ব্যবহার করতে
শিখেছেন

1
আপনি বাশ ম্যানুয়ালটিতে পুনঃনির্দেশ ডকুমেন্টেড পাবেন। কমান্ড লাইনে, কমান্ডটি প্রবেশ করান man bash। এটি একটি দীর্ঘ নথি এবং ভাল বুঝতে কয়েক দিন এমনকি সপ্তাহ খানেক সময় লাগবে, তবে আপনি যদি বাশকে পুরোপুরি শিখতে চান তবে এটি উত্তম।
ধানের ল্যান্ডাউ

উত্তর:


21

>শেল পুনর্নির্দেশ অপারেটর। শেল কমান্ডে ">" এবং ">>" এর মধ্যে পার্থক্য কী দেখুন ? এবং কখন আমার <বা <() বা << এবং> বা> () ব্যবহার করা উচিত? এটি প্রধানত কোনও কমান্ডের আউটপুট কোনও ফাইলে পুনর্নির্দেশের জন্য ব্যবহৃত হয়। যদি ফাইলটি না থাকে তবে শেল এটি তৈরি করে। যদি এটি বিদ্যমান থাকে, শেল এটি কেটে দেয় (এটিকে খালি করে)। কেবলমাত্র > file, কোনও কমান্ড নেই, সুতরাং শেলটি একটি ফাইল তৈরি করে, কিন্তু কোনও আউটপুট এটি প্রেরণ করা হয় না, সুতরাং নেট প্রভাবটি খালি ফাইল তৈরি করা বা বিদ্যমান ফাইলটি খালি করা।

touchএকটি বাহ্যিক কমান্ড যা কোনও ফাইল তৈরি করে বা টাইমস্ট্যাম্প আপডেট করে যা আপনি ইতিমধ্যে জানেন know এর সাথে touchফাইলের বিষয়বস্তুগুলি হারাবে না, যদি এটি বিদ্যমান থাকে তবে তার বিপরীতে >

এর ব্যবহার >শেলের উপর নির্ভর করে। ব্যাশ, ড্যাশ এবং বেশিরভাগ শেলগুলিতে, > fooআপনার প্রত্যাশা অনুযায়ী কাজ করবে। Zsh এ, ডিফল্টরূপে, এর > fooমতো কাজ করে cat > foo- zsh আপনার ইনপুট টাইপের জন্য অপেক্ষা করে।


10
এখানে মূল বক্তব্যটি হ'ল এর মধ্যে ব্যবহারিক পার্থক্য নেই >> fileএবং touch fileযদি fileতা বিদ্যমান না থাকে তবে তাদের উভয়ের মধ্যে একটি বড় পার্থক্য রয়েছে > file(এর আগের বিষয়বস্তুগুলি fileহারিয়ে গেছে)। এটি, এর সাথে সাথে zsh এর অসঙ্গতিপূর্ণ আচরণ touch fileহ'ল "নিরাপদ" এবং তাই এটি করার সঠিক উপায় হিসাবে মুখস্থ করা উচিত।
মন্টি হার্ডার

1

এখানে একটি আকর্ষণীয় তুলনা:

$ cat redirect.sh touch.sh sed.sh awk.sh cp.sh truncate.sh tee.sh vi.sh
> redirect.txt
touch touch.txt
sed 'w sed.txt' /dev/null
awk 'BEGIN {printf > "awk.txt"}'
cp /dev/null cp.txt
truncate -s0 truncate.txt
tee tee.txt </dev/null
vi -esc 'wq vi.txt'

ফলাফল:

$ strace dash redirect.sh | wc -l
387

$ strace dash touch.sh | wc -l
667

$ strace dash sed.sh | wc -l
698

$ strace dash awk.sh | wc -l
714

$ strace dash cp.sh | wc -l
786

$ strace dash truncate.sh | wc -l
1004

$ strace dash tee.sh | wc -l
1103

$ strace dash vi.sh | wc -l
1472

1
তুলনা আকর্ষণীয় হতে পারে যদিও, আপনি এখানে আমাকে দেখতে চান তা আমি সত্যিই দেখতে পাই না। আপনি যা যাচ্ছেন তা ব্যাখ্যা করতে পারেন? আমি অনুমান করি এটি ফাইলগুলিতে স্টাফ লেখার বিভিন্ন উপায়ে, তবে আমি এটির মতো কিছুটা বিভ্রান্তি পেয়েছি। যদিও আমার কফির অভাব হতে পারে।
এম00am

@ এম00am এখানে যা প্রদর্শিত তা কার্যকরভাবে ফাইল তৈরির জন্য 8 টি বিভিন্ন উপায় ways straceকার্যকর করা হচ্ছে এমন সিস্টেম কলগুলি দেখানোর কথা রয়েছে এবং > file.txtপদ্ধতিটি কমপক্ষে চালিত সিস্টেম কলগুলির পরিমাণ হিসাবে দেখানো হয়েছে, যা সত্যই বিস্ময়কর নয় - কোনও সরঞ্জাম যত জটিল, তত বেশি জটিল তার সিস্টেলগুলি। উদাহরণস্বরূপ প্রদর্শিত সমস্যাগুলির সাথে ইস্যুটি হ'ল এটি ডিফল্টরূপে প্রবাহিত করতে straceলিখেছে stderr, এবং এই উত্তরে স্টিভেন কেবলমাত্র পড়ার জন্য পাইপ ব্যবহার করে stderr, তাই আমি কীভাবে |পাইপ ব্যবহার করে রেখাগুলি গণনা করেছি এবং না তা কিছুটা বিভ্রান্ত করছি|&
সের্গি কলডিয়াজহনি

এবং |&উবার্টু ১ 16.০৪-তে , যেমন সার্জ উল্লেখ করেছেন, আমি এখানে একটি পঞ্চমাংশের গণনা পেয়েছি ... viমামলার ব্যতীত , যেখানে আমি একই মূল্য পাই
মুড়ু

WSL? ওহো ... আমি WSL যোগ হবে না মনে হয় যে এটি কী জন্য অনেক সিস্টেম কল।
মুরু

@muru Cygwin - WSL প্রস্তুত এখনো নেই stackoverflow.com/a/40370009
স্টিভেন পেনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.