Ordner, in dem sich das bash-Skript befindet, wenn es über ln -s ausgeführt wird

463
Egon Willighagen

In / usr / local / bin habe ich ein 'ln -s' zu /usr/local/foo/bash.script, und in diesem letzten Skript möchte ich das aktuelle Verzeichnis / usr / local / foo wissen, damit ich es kann Führen Sie ein sekundäres Skript aus diesem Ordner aus.

Jetzt habe ich dir $ 0 probiert, aber ich bekomme stattdessen den Ordner / usr / local / bin . Was sollte ich in der bash.script verwenden, um den Ordner / usr / local / foo zu erhalten ?

1

1 Antwort auf die Frage

5
Vokuhila-Oliba

versuchen Sie es readlinkzB

d=$0  while readlink $d >/dev/null; do d=`readlink $d` done echo $d 

BEARBEITEN :

Ich bin mir nicht sicher, ob das auf anderen Unix-Betriebssystemen funktioniert, aber wenn Sie Linux verwenden, können Sie dies durch die Verwendung von vereinfachen

d=`readlink -f $0`  echo $d 

sehen

readlink --help 
Danke für die Hinweise! Ich muss noch mit dirname kombinieren, und ich habe den readlink -f gesehen, der das obige in einem Befehl erledigt ... eine Idee, wie tragbar das ist? Egon Willighagen vor 14 Jahren 0
@Egon: `-f` arbeitete auch für Cygwin (auf Win-7-64bit). Aber es funktioniert nicht unter MacOS. Vokuhila-Oliba vor 14 Jahren 0
Ah, das ist gut genug für meine Bedürfnisse, denn es ist Teil eines Skripts nur für Linux. :) Danke! Egon Willighagen vor 14 Jahren 0