Supposons que j'ai un fichier bash appelé myBash.bash
. Il réside dans:
/myDirect/myFolder/myBash.bash
Maintenant, je veux utiliser la chaîne /myDirect/myFolder
(l'emplacement de myBash.bash
) à l'intérieur du script. Existe-t-il une commande que je peux utiliser pour trouver cet emplacement?
Edit: L'idée est que je veux mettre en place un dossier zip avec du code qui peut être démarré par un script bash à l'intérieur de ce fichier zip. Je connais les chemins de fichiers relatifs du code à l'intérieur de ce fichier zip, mais pas les chemins absolus, et j'en ai besoin. Une façon serait de coder en dur dans le chemin, ou d'exiger que le chemin du fichier soit donné sous forme de variable. Cependant, je trouverais plus facile s'il était possible pour le fichier bash de déterminer où il se trouve tout seul, puis de créer les chemins d'accès appropriés à l'autre fichier à partir de sa connaissance de la structure du fichier zip.
la source
Réponses:
Vous pouvez obtenir le chemin complet comme:
Et comme l'a souligné Serg, vous pouvez utiliser
dirname
pour supprimer le nom de fichier comme ceciou encore mieux pour éviter les citations et les séparations de mots difficiles avec des noms de fichiers difficiles:
Beaucoup mieux que mon idée précédente qui était de l'analyser (je savais qu'il y aurait une meilleure façon!)
Remarques
realpath
retourne le chemin réel d'un fichier$0
est ce fichier (le script)s|old|new|
remplacerold
parnew
\(.*\)/
enregistrer tous les caractères avant/
pour plus tard\1
la partie sauvegardéela source
$0
et lased
magie. Mais cettesed
magie n'est vraiment pas nécessaire lorsque des outils comme ceux-cidirname
existentrealpath
:realpath "$( dirname $0 )"
personnellement, j'utiliseraisreadlink
mais c'est moi:readlink -e $(dirname $0)
dirname "$(realpath "$0")"
mieux? Habituellement, on veut connaître le répertoire parent du fichier référencé au lieu du répertoire parent du lien symbolique faisant référence audit fichier."$(dirname "$(realpath "$0")")"
est le moyen le plus simple. Les citations à l'intérieur$()
fonctionnent normalement.$()
être un sous-shell permettra d'avoir des devis à l'extérieur. Je ne dirais pas que c'est aussi simple, sauf si l'on se rend compte que ce$()
sont tous des soussi le script se trouve sur votre chemin, vous pouvez utiliser quelque chose comme
EDIT: après avoir lu les commentaires de Serg, cela pourrait être une solution générique qui fonctionne que le script soit sur votre chemin ou non.
la source
which
convient mieux lorsque le script réside dans l'un des répertoires faisant partie de laPATH
variable. Utilisez-le à$0
partir d'un script, comme le montre Zanna. Mais votre réponse est correcte puisque vous utilisezdirname
au lieu de jouer avecsed
, donc +1 pour celaLa réponse acceptée semble parfaite. Voici une autre façon de procéder:
/bin/pwd
affiche le vrai chemin du répertoire, par opposition à lapwd
commande intégrée.la source
Il est pris comme référence de kenorb et andro
Pas de dirname, readlink, realpath, BASH_SOURCE
Tous sont intégrés
la source