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
) dans le script. Existe-t-il une commande que je peux utiliser pour trouver cet emplacement?
Edit: L'idée est que je souhaite configurer un dossier Zip avec du code pouvant être lancé par un script bash dans 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'ai besoin de ceux-ci. Une solution consisterait à coder en dur dans le chemin ou à exiger que le chemin du fichier soit donné en tant que variable. Cependant, je trouverais cela plus facile s'il était possible pour le fichier bash de déterminer lui-même où il se trouve, puis de créer les chemins appropriés vers l'autre fichier à partir de sa connaissance de la structure du fichier Zip.
Vous pouvez obtenir le chemin complet comme:
realpath "$0"
Et comme souligné par Serg vous pouvez utiliser dirname
pour effacer le nom du fichier comme ceci
dirname "$(realpath $0)"
ou encore mieux pour éviter les guillemets embarrassants et le fractionnement de Word avec des noms de fichiers difficiles:
temp=$( realpath "$0" ) && dirname "$temp"
Beaucoup mieux que mon idée précédente qui consistait à l'analyser (je savais qu'il y aurait un meilleur moyen!)
realpath "$0" | sed 's|\(.*\)/.*|\1|'
realpath
renvoie le chemin d'accès réel d'un fichier$0
est ce fichier (le script)s|old|new|
remplace old
par new
name__\(.*\)/
enregistre tous les caractères avant /
pour plus tard\1
la partie sauvegardéesi le script est sur votre chemin, vous pouvez utiliser quelque chose comme
$ myloc=$(dirname "$(which foo.sh)")
$ echo "$myloc"
/path/to/foo.sh
EDIT: après avoir lu les commentaires de Serg, cela pourrait être une solution générique qui fonctionne que le script soit dans votre chemin ou non.
myloc==$(dirname "$(realpath $0)")
dirname "$myloc"
La réponse acceptée semble parfaite. Voici une autre façon de le faire:
cd "$(dirname "$0")"
/bin/pwd
/bin/pwd
affiche le chemin réel du répertoire, par opposition à la commande intégrée pwd
.