Wenn ich einen Pfad zur Skriptdatei innerhalb des Skripts selbst suchen muss, verwende ich etwas wie folgt:
%Vor%Das funktioniert so lange, bis ich das Skript über den Symlink dazu aufruft. In diesem Fall druckt der obige Code den Speicherort der Verknüpfung statt der Originaldatei.
Gibt es eine Möglichkeit, den Pfad der ursprünglichen Skriptdatei zu erhalten, nicht den Link?
Danke, Mike
Sie wirklich müssen den folgenden BashFAQ-Artikel lesen:
Die Wahrheit ist, dass die
-Hacks NICHT zuverlässig sind, und sie werden fehlschlagen, wenn Anwendungen mit einem nullten Argument gestartet werden, das nicht der Pfad der Anwendung ist. Beispiel: login(1)
-
fügt einen
vor dem Namen Ihrer Anwendung in PATH
%code%
ein, was zu einem Bruch führt. Wenn Sie eine Anwendung in% aufrufen, enthält co_de% %code% jedoch nicht den Pfad zu Ihrer Anwendung nur der Dateiname, was bedeutet, dass Sie keine Ortsinformationen daraus extrahieren können. Es gibt eine Menge mehr Möglichkeiten, in denen dies scheitern kann.
Unterm Strich: Verlassen Sie sich nicht auf den Hack, die Wahrheit ist, dass Sie nicht herausfinden können, wo sich Ihr Skript befindet. Verwenden Sie also eine Konfigurationsoption, um das Verzeichnis Ihrer Konfigurationsdateien oder was auch immer Sie benötigen der Pfad des Skripts für.
Ich schlage das vor:
%Vor%Beispiel:
%Vor%funktioniert auch mit symbolischen Links, da realpath -P standardmäßig verwendet:
%Vor%realpath ist mit coreutils & gt; 8.5 verfügbar, denke ich
%Vor%hth
Grüße
Stefan