Wie man den Script-Dateipfad innerhalb des Skripts selbst erhält, wenn er über den Symlink aufgerufen wird

7

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

    
Ma99uS 28.05.2009, 13:12
quelle

5 Antworten

13
%Vor%     
dsm 28.05.2009, 13:25
quelle
14

Sie wirklich müssen den folgenden BashFAQ-Artikel lesen:

Die Wahrheit ist, dass die login(1) -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: - fügt einen PATH vor dem Namen Ihrer Anwendung in %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.

    
lhunath 28.05.2009 14:16
quelle
6

Verwenden Sie dafür readlink :

%Vor%     
soulmerge 28.05.2009 13:15
quelle
1
%Vor%     
Marius Dalacu 06.01.2013 19:53
quelle
0

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

    
StefanKaerst 15.09.2016 15:12
quelle

Tags und Links