কারণটি noclobber
ডিফল্ট হিসাবে সেট করা হয়নি traditionতিহ্য। ব্যবহারকারীর ইন্টারফেস ডিজাইনের বিষয় হিসাবে, "এই নতুন ফাইলটি তৈরি করা" সহজ ক্রিয়া করা এবং অতিরিক্ত বাধাটিকে আরও বিপজ্জনক ক্রিয়া করা "একটি নতুন ফাইল তৈরি করুন বা বিদ্যমান ফাইলটি ওভাররাইট করুন" তৈরি করা ভাল ধারণা। সুতরাং noclobber
এটি একটি ভাল ধারণা ( >
একটি নতুন ফাইল তৈরি >|
করতে, সম্ভাব্যভাবে বিদ্যমান ফাইলটি ওভাররাইট করতে) এবং শেলটি কয়েক দশক পরে ডিজাইন করা থাকলে এটি সম্ভবত ডিফল্ট হত।
আপনার ইন্টারেক্টিভ শেল স্টার্টআপ ফাইলে ( .bashrc
বা .zshrc
) নিম্নলিখিতগুলি ব্যবহার করার জন্য আমি দৃ strongly়ভাবে পরামর্শ দিচ্ছি :
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
প্রতিটি ক্ষেত্রে (পুনর্নির্দেশ, অনুলিপি করা, চলন্ত) লক্ষ্যটি হ'ল অপারেশনটিতে বিদ্যমান কিছু তথ্য মুছে ফেলার পার্শ্ব প্রতিক্রিয়া থাকতে পারে, যদিও বিদ্যমান তথ্য মুছে ফেলা অপারেশনের প্রাথমিক লক্ষ্য নয়। আমি rm -i
এই তালিকায় রাখি না কারণ তথ্য মুছে ফেলাটাই প্রাথমিক লক্ষ্য rm
।
দয়া করে মনে রাখবেন না noclobber
এবং -i
হয় নিরাপত্তা জাল । যদি তারা ট্রিগার করে, আপনি কিছু ভুল করেছেন । সুতরাং আপনি কী ওভাররাইট করছেন তা যাচাই না করার জন্য অজুহাত হিসাবে তাদের ব্যবহার করবেন না! মুল বক্তব্যটি হ'ল আপনার চেক করা উচিত ছিল যে আউটপুট ফাইলটি বিদ্যমান নেই। যদি আপনাকে বলা হয় file exists: foo
বা overwrite 'foo'?
, এর অর্থ হল আপনি একটি ভুল করেছেন এবং আপনার খারাপ লাগা উচিত এবং আরও সতর্ক হওয়া উচিত। বিশেষত, y
ওভাররাইট করার অনুরোধ জানানো হলে বলার অভ্যাসে যাবেন না (যুক্তিযুক্তভাবে, এলিয়াসগুলি হওয়া উচিত alias cp='yes n | cp -i' mv='yes n | mv -i'
, তবে Ctrl+ টিপুন Cআউটপুট আরও ভাল দেখায়): যদি আপনি ওভাররাইট, কমান্ড বাতিল, আউটপুট সরানো বা সরিয়ে ফেলতে চাইছেন ফাইল করুন এবং আবার কমান্ড চালান।
এই সুরক্ষাগুলি ট্রিগার করার অভ্যাসে না alsoুকে পড়াও গুরুত্বপূর্ণ কারণ আপনি যদি এমনটি করেন তবে একদিন আপনি এমন একটি মেশিনে থাকবেন যা আপনার কনফিগারেশনটি রাখে না এবং আপনি ডেটা হারাবেন কারণ আপনি যে সুরক্ষাগুলি রক্ষণভাগে গণনা করছেন তা ' সেখানে।
noclobber
কেবলমাত্র ইন্টারেক্টিভ শেলগুলির জন্য সেট করা হবে, যেহেতু .bashrc
বা .zshrc
কেবল ইন্টারেক্টিভ শেলগুলিই পড়ে। অবশ্যই আপনার শেল বিকল্পগুলি এমনভাবে পরিবর্তন করা উচিত নয় যা স্ক্রিপ্টগুলিকে প্রভাবিত করবে, যেহেতু এটি স্ক্রিপ্টগুলি ভেঙে দিতে পারে।
rm *
...