6 votes

Linux: Comment exécuter un script de manière à ce qu'il connaisse son répertoire ?

Je dois écrire un script, qui devrait être appelé de n'importe quelle location, mais doit s'exécuter à partir du répertoire dans lequel il se trouve. Le script devrait interroger son répertoire à l'exécution.

Comment cela peut-il être réalisé?

Exemple:

  • Le script hello.sh se trouve dans /someplace/
  • bien qu'il soit appelé depuis /other/place/,
  • le script sait (pendant l'exécution) qu'il se trouve dans /someplace

EDIT
Question supplémentaire:
Et pour l'emplacement du script, mais avec les liens symboliques résolus?

Exemple:

  • Le script hello.sh se trouve dans /someplace/
  • un lien symbolique existe vers lui dans /bin
  • bien que le lien symbolique soit appelé depuis /other/place/,
  • le script sait (pendant l'exécution) qu'il se trouve dans /someplace

5voto

Damian Powell Points 315
echo $(dirname $0)

ou

echo ${0%/*}

2voto

ine Points 10065

Pour ma question supplémentaire: j'ai trouvé que cela fonctionne:

echo $(dirname $(readlink $0))

ou

echo `dirname \`readlink $0\``

EDIT
Il semble que cette réponse soit arrivée en même temps que le commentaire de Dennis Williamson avec la solution ;)

1voto

DLH Points 1324

Découvrez la variable d'environnement $_

À partir de la page de manuel de bash:

Au démarrage du shell, défini sur le chemin d'accès absolu utilisé pour invoquer le shell ou le script de shell en cours d'exécution tel que transmis dans l'environnement ou la liste d'arguments. Par la suite, se développe en le dernier argument de la commande précédente, après l'expansion. Également défini sur le chemin d'accès complet utilisé pour invoquer chaque commande exécutée et placé dans l'environnement exporté à cette commande. Lors de la vérification du courrier, ce paramètre contient le nom du fichier de courrier actuellement vérifié.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X