Invocation du script bash

0

Avoir un script simple:

echo "file: $0"

quand invoqué comme ceci:

bash myscript.sh

ou

./myscript.sh

donne le nom de fichier du script ( file: myscript.sh ) comme prévu mais quand invoqué:

source myscript.sh

ou

. ./myscript.sh

donne le nom du shell ( bash ) au lieu du nom du fichier de script.

Pourquoi est-ce comme ça?

Mulligan
la source

Réponses:

2

Le premier appel lancera une nouvelle instance de bash pour interpréter le script, ce qui signifie que bash définira $0 à son chemin.

Le second appel traitera le fichier comme exécutable et l'exécutera, donc $0 va pointer vers elle.

Les deux derniers appels chargeront le fichier dans l’instance actuelle de bash, donc $0 va pointer là.

NB: le fichier n ° 2 doit être exécutable, les n ° 1, n ° 3 et n ° 4 pas

Eugen Rieck
la source
1
N ° 1 n'a pas besoin que le fichier soit exécutable, seul le n ° 2 en a
Eric Renouf
Lire plus attentivement aurait aidé - merci pour la capture!
Eugen Rieck