Der Grund, der noclobber
nicht 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 noclobber
ist 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 ( .bashrc
oder .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 -i
in diese Liste, weil das Löschen von Daten das Hauptziel von ist rm
.
Beachten Sie das noclobber
und -i
sind 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: foo
oder 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, y
wenn 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.
noclobber
wird nur für interaktiven Shells gesetzt werden, da .bashrc
oder .zshrc
nur 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 *
...