2009-05-27 6 views
3

Existe-t-il une commande bash qui prend en entrée un chemin de fichier et renvoie un chemin de fichier absolu? Plus je serais spécifiquement comme une commande qui prend en entrée un chemin tel que:comment évaluer un chemin donné dans un shell bash

/tmp/yaneeve/kit/linux/../../output/kit/SOURCES//usr//apps/myapp/lib

et renvoie le chemin:

/tmp/yaneeve/output/kit/SOURCES/usr/apps/myapp/lib

Merci!

Répondre

5

Essayez (Linux)

readlink -f 
+0

Salut à tous, Notez que je J'ai trouvé un bug (?) dans readlink. Lorsque le chemin n'existe pas réellement, il ajoute seulement la première partie à sa sortie. Par exemple: dire l'entrée est/tmp/yaneeve/apps/newapp/Guide/fra et dire que la partie la plus profonde de ce chemin qui existe est/tmp/yaneeve/apps la sortie serait/tmp/yaneeve/apps/newapp Vous avez des commentaires à faire sur ce résultat? – Yaneeve

+0

Il ne sort rien ici, pour des chemins inexistants (j'ai utilisé exactement votre exemple). – TheBonsai

9

Si le chemin existe, il existe un moyen portable qui est (même sur linux) beaucoup plus fiable:

canonicalPath=$(cd "$path"; pwd) 
+0

Bonne prise. Est-il nécessaire d'utiliser le programme pwd externe? L'interne suit le chemin logique, qui n'a pas besoin de correspondre à celui "physique". – TheBonsai

+0

comment est-ce plus fiable? – Yaneeve

+0

mkdir un "dir1", créez un lien "dir2", cd dir2, comparez pwd et commande pwd. – TheBonsai

Questions connexes