Comment exécuter un script à partir d'un autre chemin et connaître le chemin du script?


8

J'ai besoin d'exécuter un script qui accède à un fichier dans le même chemin d'accès qu'il se trouve.

Par exemple: j'ai le script dedans /home/me/folder/script.sh, et ce script accédera au fichier /home/me/folder/myfile. Comme le fichier se trouve dans le même chemin que le script, j'utilise simplement le nom myfile, pas le chemin complet.

Mais si je l'exécute /tmp/, comme:

/tmp$ /home/me/folder/script.sh

ça me donne:

myfile: No such file or directory

Alors, comment puis-je dire dans le script que le fichier se trouve dans le même chemin que le script lui-même?


Pouvez-vous montrer à quoi sert mon fichier ici?
— Faheem Mitha

@Faheem Mitha: est juste un autre script que mon script.sh appelle.
— Tom Brito

Une raison pour laquelle vous ne souhaitez pas utiliser le chemin complet, ou déplacer les deux dans votre CHEMIN?
— Faheem Mitha

1
@Faheem Mitha: Je veux pouvoir déplacer ce dossier avec les scripts vers un autre endroit, peut-être même un autre ordinateur, sans avoir besoin de réécrire le chemin de mon fichier.
— Tom Brito

Réponses:



9

Vous ne pouvez pas savoir dans toutes les circonstances, mais souvent (pas toujours) lorsque vous exécutez un script par chemin d'accès au lieu de laisser la recherche de shell $PATH, le chemin d'accès au script sera $0. Vous pouvez ensuite utiliser dirname "$0"ou ${0%/*}pour obtenir le chemin.


4

Je ferais normalement quelque chose comme ça à la tête de mon script:

SCRIPTDIR=$(dirname "$0")

Ou, pour obtenir le chemin d'accès complet dans le répertoire du script (au lieu d'un chemin d'accès relatif):

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

Référez-vous ensuite là ${SCRIPTDIR}où vous en avez besoin.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.