Abrufen der übergeordneten Ordner script
Arbeite ich an einem uninstaller script zum löschen der übergeordnete Ordner, in dem das Skript installiert ist.
/usr/local/Myapplication/Uninstaller/uninstall.sh
So uninstall.sh zu tun hat dies:
rm- rf /usr/local/Myapplication
Kann ich abrufen, den Ordner, in dem deinstallieren befindet
SYMLINKS=$(readlink -f "$0")
UNINSTALL_PATH=$(dirname "$SYMLINKS")
Aber ich bin mir noch nicht sicher, ziemlich Weg, um den übergeordneten Pfad.
Ich dachte, der Verwendung von sed zu demove "Uninstaller" Teil dieses Weges, aber es ist eine elegante Weise, um den Pfad zum Ordner "Myapplication", um es zu löschen?
Danke
in Ihrem Skript:
Sehen Sie die berühmten Kann ein Bash-script sagen, in welchem Verzeichnis es gespeichert werden? Frage, dann
cd "$(dirname "$0")" && cd .. && cd .. && [ -d Myapplication/Uninstaller ] && rm -rf Myapplication
(ich fügte hinzu, ein zu überprüfen, dass das Verzeichnis, das wir sind, zu löschen, enthält ein Unterverzeichnis "Uninstaller", aber man könnte vielleicht einen besser überprüfen, beispielsweise von einer Datei innerhalb Myapplication ?). Wenn Sie nicht wissen, "Myapplication", dann : cd "$(dirname $0)" && cd .. && zepath="$(pwd)" && cd .. && [ -f "${zepath}/somefilesthathouldbehere" ] && rm -rf "${zepath}"
Sehen Sie die berühmten Kann ein Bash-script sagen, in welchem Verzeichnis es gespeichert werden? Frage, dann
cd ..
von dort.InformationsquelleAutor MangO_O | 2013-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie über die Verwendung
dirname
zweimal?Das zitieren desaster ist nur notwendig, um Schutz gegen Leerzeichen in Pfaden. Ansonsten wäre es angenehmer für die Augen:
APP_ROOT=$(dirname "``$(readlink -f "$0")``")
funktionieren würde, aber gibt es eine andere Möglichkeit?Sie brauchen nicht zu iffy über.
dirname
zugeschnitten ist, um Ihnen den Teil des Verzeichnisses, der einen Pfad. Es ist genau das richtige Werkzeug, dies zu tun. Ich update die Antwort für die syntax.Hinweis: diese Methode ist unsicher, für "hässliche" Namen. Ein name wie "- "rm-rf" bricht das gewünschte Verhalten. Wahrscheinlich "." wird, auch. Ich weiß nicht, ob das ist der beste Weg, aber ich habe eine eigene "Richtigkeit" fokussiert die Frage hier: stackoverflow.com/questions/40700119/...
InformationsquelleAutor Boldewyn
Bekommen nur die Eltern des übergeordneten Verzeichnisses:
InformationsquelleAutor mihai_mandis
die ultimative einfache Weg, um das übergeordnete Verzeichnis Pfad:
Sie müssen also ersetzen PWD von script ' s dir :
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"; PARENT_DIRECTORY="${DIR%/*}"
InformationsquelleAutor thom
Wenn Sie müssen einen absoluten Pfad, dann müssen Sie
cd
. Ansonsten kann man nur verwenden$(dirname $0)/..
InformationsquelleAutor Sergey Fedorov
Vollständigen Pfad zum übergeordneten dir der Skript, d.h. "/usr/local/bin/bla":
export PARENT_OF_THIS_SCRIPT=$( cd $(dirname $0) ; pwd -P )
Nur die jüngsten Eltern der Skript, d.h. "bla":
export PARENT_DIR_OF_SCRIPT=$( cd $(dirname $0) ; pwd -P | xargs basename )
InformationsquelleAutor Joe Goggins
Warum nicht fügen Sie einfach ../am Ende des Pfades?
Auch würden Sie brauchen, um hinzuzufügen
/../
. Und wenn, aus welchem Grund auch immer,$UNINSTALL_PATH
leer ist,/../ == /
und du bist das abwischen der Festplatte.InformationsquelleAutor Pierre Arlaud