Essayez :
ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)
Ce que vous cherchez est readlink
:
absolute_path=$(readlink -m /home/nohsib/dvc/../bop)
Veuillez noter : Vous devez utiliser le readlink
de GNU implémentation qui offre l'option "-m". readlink
de BSD par exemple non.
Si vous voulez le faire sans suivre aucun lien symbolique, essayez d'utiliser realpath
avec option -s
:
$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop
Notez qu'avec realpath
, normalement tous les composants sauf le dernier doivent exister. Donc, pour que ce qui précède fonctionne, les éléments suivants doivent tous être présents dans le système de fichiers :
/home
/home/nohsib
/home/nohsib/dvc
Mais vous pouvez contourner cette exigence en utilisant le -m
option.
$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop
(Remarque realpath
n'est pas disponible sur tous les systèmes, en particulier les anciens systèmes non Debian. Pour ceux qui travaillent sur Linux embarqué, malheureusement Busybox realpath
ne prend pas en charge le -s
ou -m
commutateurs.)
Un problème avec l'utilisation :
ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)
est que si ${possibleDirectory} n'existe pas, ABSOLUTE_PATH sera alors défini sur le répertoire courant. Ce qui n'est probablement PAS ce que vous voulez ou attendez.
Je pense que l'utilisation de cette version peut être plus souhaitable en général :
ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)
Si ${possibleDirectory} n'existe pas ou n'est pas accessible, en raison d'autorisations d'accès au répertoire manquantes, ABSOLUTE_PATH contiendra la chaîne vide.
L'avantage de ceci est que vous pouvez ensuite tester la chaîne vide ou la laisser échouer naturellement, selon les circonstances. L'utilisation par défaut du répertoire courant en cas d'échec de la commande 'cd' peut entraîner des résultats très inattendus et éventuellement désastreux (par exemple, rm -rf "$ABSOLUTE_PATH" )