172 votes

Comment voir le chemin absolu complet d'un lien symbolique ?

Quand j'utilise ls -la symlinkName o stat symlinkName tout le chemin n'est pas affiché (par exemple ../../../one/two/file.txt )

Quelle est la commande linux qui révèle le chemin complet ?

1voto

Arunas Bartisius Points 311

Je vais faire une brève revue et analyse ici, mais pour les TL;DR, voici une ligne de commande pour bash, utile pour ancrer le répertoire de travail :

script_home=$( dirname $(realpath "$0") )

Ou vous pouvez utiliser n'importe quel autre nom de fichier au lieu de $0 pour déterminer son emplacement réel.

Il n'y a pas seulement un problème de détermination du chemin réel d'un fichier, mais surtout un script est appelé via un lien symbolique à partir d'un autre emplacement et doit référencer d'autres ressources relatives à son répertoire de travail réel.

Les détails suivent. Supposons que nous ayons un vrai script ou fichier et un lien symbolique vers celui-ci :

$ ls -la
-rwxr-xr-x 1 root    root  0 Mar 20 07:05 realscript.sh
lrwxrwxrwx 1 root    root 10 Mar 20 07:05 symlink -> realscript.sh

Et la partie de GNU coreutils contient quelques commandes très utiles :

$ realpath symlink
/home/test/realscript.sh

voir aussi sur l'original :

realpath realscript.sh
/home/test/realscript.sh

Une autre très bonne combinaison dans les scripts est d'utiliser dirname sur script

$ dirname /home/test/realscript.sh
/home/test

donc pour résumer, vous pouvez utiliser dans script

echo  $( dirname $(realpath "symlink") )

ou pour obtenir et stocker dans une variable le vrai script home dir et sauver le code pour obtenir le vrai chemin script realscript.sh :

script_home=$( dirname $(realpath "$0") )
echo Original script home: $script_home

Où "$0" est défini comme "self" dans le shell script.

Pour tout tester, nous mettons un lien symbolique dans /home/test2/, nous modifions quelques éléments supplémentaires et nous l'exécutons/appelons depuis le répertoire racine :

$ /home/test2/symlink
/home/test
Original script home: /home/test
Original script is: /home/test/realscript.sh
Called script is: /home/test2/symlink

Essayez d'écrire vous-même les sorties modifiées :)

Mise à jour 2021, il y a aussi la commande :

readlink - imprime les liens symboliques résolus ou les noms de fichiers canoniques

DESCRIPTION Note realpath(1) est la commande préférée à utiliser pour la fonctionnalité de canonisation.

0voto

Dans macOS Catalina, essayez -

readlink -n `which <command>`

Exemple d'entrée -

readlink -n `which adb`

Exemple de sortie -

/usr/local/Caskroom/android-platform-tools/31.0.1,d027ce0f9f214a4bd575a73786b44d8ccf7e7516/platform-tools/adb

0voto

TedEd Points 71

Sur mon mac, j'ai les éléments suivants :

Par exemple, créer un lien symbolique vers le répertoire : ln -s /Users/test/play/game game

Ensuite, si j'utilise le lien symbolique pour aller dans le répertoire : cd game Si je lance la commande : pwd, le répertoire dans lequel vous vous trouvez est.. : ~

Si je décide que je veux vraiment changer pour le dir : /Users/test/play/game pour une raison quelconque, j'ai un alias dans mon .bash_profile configuré :

alias cdp='cd -P $(basename `pwd`)'

après avoir utilisé la méthode ci-dessus cdp suivi de l'alias pwd commande le répertoire actuel est : /Users/test/play/game

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X