Um zu verhindern, dass vorhandene Dateien durch Umleitung überschrieben werden >
Verwenden Sie die noclobber
Option in bash
oder jede POSIX-ähnliche Shell (auch in (t)csh
woher die Funktion tatsächlich stammt, obwohl Sie set noclobber
tun statt set -o noclobber
/set -C
dort). Wenn Sie dann das Ersetzen einer Datei erzwingen müssen, verwenden Sie den >|
Umleitungsoperator (>!
in (t)csh
).
Beispiel:
$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz
Übrigens können Sie die aktuellen Einstellungen mit set -o
überprüfen :
$ set -o
...
monitor on
noclobber on
noexec off
...
Leider vermute ich, dass Sie es umschreiben müssen. (Wenn Sie Backups haben, ist es jetzt an der Zeit, sie herauszuholen. Wenn nicht, würde ich Ihnen dringend empfehlen, ein Backup-Regime für die Zukunft einzurichten. Viele Optionen verfügbar, aber für diese Antwort kein Thema.)
Ich finde, dass ausführbare Dateien in einem separaten Verzeichnis abgelegt und dieses Verzeichnis zu PATH
hinzugefügt werden ist hilfreich. Auf diese Weise muss ich die ausführbaren Dateien nicht über den expliziten Pfad referenzieren. Mein bevorzugtes Programmverzeichnis für persönliche (private) Skripte ist "$HOME"/bin
und kann mit PATH="$HOME/bin:$PATH"
zum Programmsuchpfad hinzugefügt werden . Normalerweise wird dies zu den Shell-Startskripten .bash_profile
hinzugefügt und/oder .bashrc
.
Schließlich hindert Sie nichts daran, sich selbst die Schreibberechtigung für alle ausführbaren Programme zu entziehen:
touch some_executable.py
chmod a+x,a-w some_executable.py # chmod 555, if you prefer
ls -l some_executable.py
-r-xr-xr-x+ 1 roaima roaima 0 Jun 25 18:33 some_executable.py
echo "The hunting of the Snark" > ./some_executable.py
-bash: ./some_executable.py: Permission denied
Ich empfehle dringend, die wichtigen Skripte zu haben unter einem Git-Repo , aus der Ferne synchronisiert (eine schicke selbst gehostete Plattform reicht aus), wie @caseys Kommentar sagt.
Auf diese Weise sind Sie vor schlimmen menschlichen Fehlern wie dem Zurücksetzen der Datei auf den vorherigen Arbeitszustand und dem erneuten Ausführen geschützt.