Je me demandais si les deux façons suivantes d'exécuter un script bash sont équivalentes?
. ./myScript.sh source myScript.sh
- Exécutent-ils tous les deux le contenu du script au lieu d'exécuter le script, c'est-à-dire qu'ils ne créent pas de sous-shell pour exécuter le script?
26
man .
,man source
ou tout ce que je ne sais pas encore.type .
ethelp .
man $SHELL
,/source
Réponses:
Ils sont équivalents en bash en ce qu'ils font exactement la même chose. D'un autre côté, il a
source
5 caractères de plus et n'est pas portable pour les shells POSIX uniquement ou Bourne alors que.
(point) l'est, donc je ne me donne jamais la peine de l'utilisersource
.C'est correct - le sourcing d'un fichier exécute les commandes dans le shell courant et cela affectera votre environnement shell actuel. Vous pouvez toujours passer des arguments au fichier source et bash recherchera
$PATH
le nom du fichier comme une commande normale s'il ne contient aucune barre oblique.Pas lié à la question initiale de
.
vssource
, mais dans votre exemple,n'est pas identique à
car tandis que
.
etsource
sont fonctionnellement identiques,myScript.sh
et./myScript.sh
ne sont pas les mêmes. Puisqu'il./myScript.sh
contient une barre oblique, il est interprété comme un chemin et le shell utilise simplement./myScript.sh
. Cependant,myScript.sh
n'a pas de barre oblique, le shell le$PATH
recherche d'abord. Il s'agit du comportement standard spécifié par POSIX pour.
. La plupart des shells ont cette valeur par défaut bien qu'ils puissent ajouter des extensions (telles que la recherche dans le répertoire de travail actuel après la recherche de chemin) ou des options pour changer le comportement de.
/source
.la source
/
est dépendant du shell et pourbash
etzsh
dépend si le mode POSIX est activé ou non. Notez également que dans de nombreuses implémentations de ksh,.
se comporte différemment desource
.Oui, ils sont équivalents. Il n'y a pas de différence fonctionnelle;
.
est juste un synonyme intégré poursource
.(Edit: Apparemment , cela est vrai que pour
bash
etzsh
quelques obus plus légers n'ont pas.source
, Que.
spécifié par POSIX doncksh
,dash
,ash
, etc. peuvent ne passource
voir. La réponse de jw013 pour info.)la source
$ alias .
sortiesbash: alias: .: not found
.