bash löscht Ordner während der Ausführung eines Skripts

bash löscht Ordner während der Ausführung eines Skripts

In einem Ordner läuft ein Skript. Wenn ein Befehl fehlschlägt, möchte ich den Ordner löschen, der das Skript enthält. Ist das möglich?

Bearbeiten: Aufgrund des Kommentars habe ich entfernt, was ich versucht habe.

Antwort1

Ich gebe eine Antwort, weil ich befürchte, dass jemand den Vorschlag des OP ausprobieren würde …

eine GROSSE Warnung: das in der Frage gezeigte Skript löscht das von angegebene Verzeichnis pwd, das NICHT das Verzeichnis ist, in dem sich das Skript befindet, sonderndas Verzeichnis, in dem sich der USER beim Starten des Skripts befindet.

Wenn man das tut: (**VERSUCHEN SIE DIES NICHT **) cd ; /path/to/thatscriptwürde man das GESAMTE HOME-VERZEICHNIS DES BENUTZERS löschen (als „cd“ dorthin zurückgekehrt ist) UND ALLES DARUNTER! …

(Dies ist insbesondere bei einigen Betriebssystemen schlimm, bei denen das Homedir des Root-Benutzers "/" ist ...).

Stattdessen sollten Sie in Ihrem Skript:

mydir="$(cd -P "$(dirname "$0");pwd)"     
      #retrieve the script's absolute path, 
      #even if the script was called via ../relative/path/to/script
echo "the script '$0' is in: ${mydir} "
...
# and then (if you really want this.... but I think it's a bad idea!)
# rm -rf "${mydir:-/tmp/__UNDEFINED__}"  #deletes ${mydir}, if defined
# once you're sure it is correctly reflecting the real script's directory.

Antwort2

Ja, du kannst.

und das wird passieren:

[root@server ~]# mkdir neu&&cd neu
[root@server neu]# echo -e "#! /bin/bash\nrm -rf" >remove.sh
[root@server neu]# cat remove.sh
#!/bin/bash
rm -rf ~/neu
[root@server neu]# ls
entfernen.sh
[root@server neu]# bash remove.sh
[root@serverneu]# ls

(hier leer, alle Dateien und Verzeichnisse sind gelöscht, aber wir befinden uns noch in diesem „neuen“ Ordner, bevor wir unser Verzeichnis ändern)
[root@serverneu]# CD ..
[root@server ~]# ls neu
ls: kann nicht auf neu zugreifen: Keine solche Datei oder kein solches Verzeichnis

verwandte Informationen