Причина 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 *
...