Причина noclobberне встановлена за замовчуванням - це традиція. Що стосується дизайну інтерфейсу користувача, то гарна ідея зробити «створити цей новий файл» легкою дією та поставити додаткову перешкоду більш небезпечній дії «або створити новий файл, або перезаписати існуючий файл». Таким чином noclobber, це гарна ідея ( >створити новий файл, >|щоб потенційно перезаписати існуючий файл), і, швидше за все, це було б за замовчуванням, якби оболонка була розроблена через кілька десятиліть.
Я настійно рекомендую використовувати у своєму інтерактивному файлі запуску оболонки ( .bashrcабо .zshrc) таке:
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робить результат вигіднішим): якщо ви мали намір перезаписати, скасуйте команду, перемістіть або видаліть вихід файл та запустити команду ще раз.
Також важливо не впадати в звичку запускати ці безпеки, тому що якщо ви це зробите, одного дня ви будете працювати на машині, яка не має вашої конфігурації, і ви втратите дані, оскільки захист, на який ви розраховували, не є ' т там.
noclobberбуде встановлено лише для інтерактивних оболонок, оскільки .bashrcабо .zshrcїх читають лише інтерактивні оболонки. Звичайно, ви не повинні змінювати параметри оболонки таким чином, що впливатиме на скрипти, оскільки це може зламати ці сценарії.
rm *...