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 ?
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 ?
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.
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 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.