Quelle est la difference entre “source” et “.”?

147

Quelle est la différence entre l'exécution d'un script (par exemple / some / script) avec source /some/scriptet . /some/scriptdans Bash?

binW
la source

Réponses:

134

sourceet .sont synonymes dans Bash .

Si vous souhaitez vérifier que les commandes sont simplement des synonymes et rien de plus, consultez le code source , par exemple pour la version 4.3, et examinez le fichier builtins/source.def. Vous lirez que les deux commandes intégrées, sourceet ., utilisez la même fonction: source_builtin.

Kiamlaluno
la source
Où est-ce défini? Je veux dire est. un alias pour la source ou est-ce autre chose?
binW
exactement la même chose
12
@binW: .est la commande source traditionnelle, héritée de l'ancien shell. sourceest juste une bash intégrée qui fait exactement la même chose ., probablement parce qu’elle est plus lisible (une .seule peut être difficile à repérer avec une petite police). Vous verrez help sourceet help .montre les mêmes informations.
geirha
3
@binW: Si vous regardez dans man bashpuis recherchez sourcevous verrez que source filename [arguments]c'est un synonyme de . filename [arguments].
Matthew Rankin
46

.est synonyme de sourcebash, mais pas de POSIX sh, vous devez donc l'utiliser .si votre script est exécuté par / bin / sh. Notez que bash prétend fonctionner comme POSIX sh lorsqu'il est appelé / bin / sh, mais accepte sourcesans se plaindre.

Ce comportement m'a mordu, les scripts testés avec bash en tant que / bin / sh échouent lorsqu'ils sont exécutés sous ash, par exemple.

jjg
la source
16
POSIX ne restreint pas le shell. POSIX dit juste; le shell doit au moins supporter ceci et cela caractéristique. Ainsi, un shell POSIX est libre d'implémenter des fonctionnalités supplémentaires à condition que celles décrites par POSIX soient implémentées. Lorsque le shebang dit que #!/bin/shvous ne devriez jamais supposer que le shell ne prend en charge que des fonctionnalités POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/…
geirha Le
Vous pouvez être concerné par l'ordre des noms de recherche: unix.stackexchange.com/q/17815/8250
Lekensteyn le
3
Cette réponse m'a aidé, car sh est souvent utilisé dans cron.
Dfrankow