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?

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.


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.


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
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.