Der Grund, der noclobbernicht standardmäßig festgelegt ist, ist Tradition. In Bezug auf das Design der Benutzeroberfläche ist es eine gute Idee, die Aktion "Diese neue Datei erstellen" zu vereinfachen und die gefährlichere Aktion "Eine neue Datei erstellen oder eine vorhandene Datei überschreiben" als zusätzliche Hürde zu definieren. Daher noclobberist es eine gute Idee ( >eine neue Datei zu erstellen, >|möglicherweise eine vorhandene Datei zu überschreiben), und es wäre wahrscheinlich die Standardeinstellung gewesen, wenn die Shell einige Jahrzehnte später entworfen worden wäre.
Ich empfehle dringend, Folgendes in Ihrer interaktiven Shell-Startdatei ( .bashrcoder .zshrc) zu verwenden:
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
In jedem Fall (Umleiten, Kopieren, Verschieben) besteht das Ziel darin, eine zusätzliche Hürde hinzuzufügen, wenn die Operation den Nebeneffekt hat, dass einige vorhandene Daten gelöscht werden, obwohl das Löschen vorhandener Daten nicht das primäre Ziel der Operation ist. Ich schreibe nicht rm -iin diese Liste, weil das Löschen von Daten das Hauptziel von ist rm.
Beachten Sie das noclobberund -isind Sicherheitsnetze . Wenn sie auslösen, haben Sie etwas falsch gemacht . Verwenden Sie sie also nicht als Entschuldigung, um nicht zu überprüfen, was Sie überschreiben! Der Punkt ist, dass Sie überprüft haben sollten, dass die Ausgabedatei nicht existiert. Wenn Ihnen file exists: foooder gesagt wird overwrite 'foo'?, bedeutet dies, dass Sie einen Fehler gemacht haben und dass Sie sich schlecht fühlen und vorsichtiger sein sollten. Machen Sie sich insbesondere nicht die Gewohnheit, zu sagen, ywenn Sie zum Überschreiben aufgefordert werden (wahrscheinlich sollten es die Aliase sein alias cp='yes n | cp -i' mv='yes n | mv -i', aber wenn Sie Ctrl+ drücken, Csieht die Ausgabe besser aus): Wenn Sie überschreiben wollten, brechen Sie den Befehl ab, verschieben oder entfernen Sie die Ausgabe Datei, und führen Sie den Befehl erneut aus.
Es ist auch wichtig, dass Sie sich nicht angewöhnen, diese Sicherheitsmaßnahmen auszulösen, da Sie sich eines Tages auf einem Computer befinden, der nicht über Ihre Konfiguration verfügt, und Sie Daten verlieren, weil der Schutz, auf den Sie zählen, nicht vorhanden ist. t dort.
noclobberwird nur für interaktiven Shells gesetzt werden, da .bashrcoder .zshrcnur durch interaktiven Shells gelesen wird. Natürlich sollten Sie die Shell-Optionen nicht so ändern, dass sie sich auf Skripte auswirken, da sie diese Skripte beschädigen könnten.
rm *...