OK, source
exécute donc le script dans le shell actuel et .
séparément, comme détaillé dans l' exécution du script avec "." Et avec "source" par exemple, mais, spécifiquement, dans mon .bashrc
fichier, j'ai:
[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ -f ~/.git-completion.bash ] && source ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh
Puis-je le remplacer par:
[ -f ~/.bash_aliases ] && . ~/.bash_aliases
[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh
Est-ce que cela fonctionnera sous OS X - est-ce le problème "POSIX"?
Je l'ai essayé et ce qui précède semble toujours fonctionner sur Ubuntu (donc ils fonctionnent réellement avec les deux source
et .
, c'est-à-dire, ils me donnent la fonctionnalité souhaitée dans le shell). Dois-je choisir l'un plutôt que l'autre, ou manque-t-il quelque chose?
FWIW, sur OS X, je me procède à .bashrc
partir de mon .bash_profile
.
source
exécute le script dans le shell actuel et.
séparément"? Ils l'ont tous deux exécuté dans le shell actuel; sinon ça ne servirait à rienRéponses:
Voici la définition de POSIX de
.dot
:Compte tenu de ce qui précède, vous pourriez aussi bien remplacer votre tout
[ -f ./file ] && source ./file
à. ./file
fait. Si le fichier n'est pas là, le pire qui se produira, c'est que vous recevrez une notification lors de la connexion - ce qui est probablement une information que vous voudriez avoir, je pense.Bien sûr, si vous préférez garder le test, vous pouvez le faire:
la source
$_
, j'aime ça. :)test -f /.file && . $_
approche illustrée ici$_
n'est pas standardisé par POSIX. Les 8 paramètres spéciaux sont$@
,$*
,$#
,$$
,$!
,$?
,$-
et$0
.$_
est explicitement omis . Votre commentaire incorrect a déclenché une question .Dans
bash
,.
etsource
sont des synonymes. En regardantbash
le code source, le fichierbuiltin/source.def
, vous pouvez voir.
etsource
utiliser la même fonction internesource_builtin
:Mais
source
n'est pas compatible POSIX, donc si votre script est appelé avec POSIX/bin/sh
, vous devez utiliser à la.
place desource
. Puisque POSIX ne restreint pas le shell, tout votre script ci-dessus fonctionnera.Personnellement, j'utilise toujours
.
au lieu desource
. (Un grand nombre de scripts que j'ai écrits fonctionnent souscron
).la source
.
est généralement "meilleure" que l'utilisationsource
, comme le dit @abonet,source
est beaucoup plus facile à rechercher. Étant donné que les règles sont ponctuées dans de nombreuses langues, il est facile pour l'œil de les ignorer. C'est pourquoi je préfère utilisersource
.