GNU/Linux >> Tutoriels Linux >  >> Linux

Comment convertir .. dans les noms de chemin en nom absolu dans un script bash ?

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" )


Linux
  1. Comment déboguer un script bash ?

  2. Comment définir les paramètres lorsque Pipe Bash Script to Bash ?

  3. Comment appeler une fonction Bash dans le script Bash à l'intérieur d'Awk ?

  4. Comment diviser une chaîne dans un script bash

  5. Comment normaliser un chemin de fichier dans Bash ?

Comment écrire un script bash avec des exemples

Comment exécuter un script bash

Comment vérifier la syntaxe d'un script Bash sans l'exécuter ?

Comment inclure un fichier dans un script shell bash

Comment exécuter un script bash ?

Comment exécuter un script bash via un chemin absolu ?