GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Versehentlich die Ausgabeumleitung > anstelle eines senkrechten Strichs | verwendet

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.


Linux
  1. Lesen und schreiben Sie Daten von überall mit Umleitung im Linux-Terminal

  2. Ausgabe umleiten und leiten?

  3. Verstehen des Verzeichnisses /etc/sysconfig

  4. Wie hängt man die Ausgabe an eine Datei an?

  5. diff, um nur die Dateinamen auszugeben

Eingabe-/Ausgabeumleitung in Linux/Unix

Der Zweck der Verwendung eines Fifo im Vergleich zu einer temporären Datei oder einer Pipe?

In dieselbe Datei wie die vom Befehl verarbeitete Quelldatei umleiten?

Alle Terminalausgaben in einer Datei speichern?

Shell-Scripting Teil 4 – Eingabe, Ausgabe und Umleitung

Speichern Sie die Ausgabe eines Befehls vom Debian-Terminal in einer Datei