Przyczyną noclobbernie jest domyślnie tradycja. W związku z projektem interfejsu użytkownika dobrym pomysłem jest uczynienie „tworzenia tego nowego pliku” łatwą akcją, a dodatkowo utrudnianie bardziej niebezpiecznej akcji „albo stwórz nowy plik, albo zastąp istniejący plik”. noclobberJest to zatem dobry pomysł ( >aby utworzyć nowy plik, >|potencjalnie nadpisać istniejący plik) i prawdopodobnie byłby domyślny, gdyby powłoka została zaprojektowana kilkadziesiąt lat później.
Zdecydowanie zalecam użycie następujących elementów w interaktywnym pliku startowym powłoki ( .bashrclub .zshrc):
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
W każdym przypadku (przekierowanie, kopiowanie, przenoszenie) celem jest dodanie dodatkowej przeszkody, gdy operacja może mieć efekt uboczny usunięcia niektórych istniejących danych, nawet jeśli usunięcie istniejących danych nie jest głównym celem operacji. Nie umieszczam rm -ina tej liście, ponieważ usunięcie danych jest głównym celem rm.
Należy pamiętać, że noclobberi -isą siatki bezpieczeństwa . Jeśli zadziałają, zrobiłeś coś złego . Więc nie używaj ich jako wymówki, aby nie sprawdzać, co zastępujesz! Chodzi o to, że powinieneś był sprawdzić, czy plik wyjściowy nie istnieje. Jeśli powiesz file exists: foolub overwrite 'foo'?, oznacza to, że popełniłeś błąd i powinieneś czuć się źle i być bardziej ostrożnym. W szczególności nie przyzwyczajaj się do mówienia, ygdy pojawi się monit o zastąpienie (prawdopodobnie aliasy powinny alias cp='yes n | cp -i' mv='yes n | mv -i', ale naciśnięcie Ctrl+ Cpoprawia wygląd danych wyjściowych): jeśli chciałeś zastąpić, anuluj polecenie, przenieś lub usuń dane wyjściowe plik i ponownie uruchom komendę.
Ważne jest również, aby nie przyzwyczaić się do wyzwalania tych zabezpieczeń, ponieważ jeśli to zrobisz, pewnego dnia będziesz na komputerze, który nie ma twojej konfiguracji i stracisz dane, ponieważ zabezpieczenia, na które liczyłeś, nie są tam.
noclobberzostanie ustawiony tylko dla interaktywnych powłok, ponieważ .bashrclub .zshrcjest odczytywany tylko przez interaktywne powłoki. Oczywiście nie powinieneś zmieniać opcji powłoki w sposób, który wpływałby na skrypty, ponieważ mogłoby to spowodować ich uszkodzenie.
rm *...