
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/thatscript
wü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