OK, entonces sourceejecuta el script en el shell actual y por .separado, como se detalla en el script en ejecución con "." Y con "source", por ejemplo, pero, específicamente, en mi .bashrcarchivo, tengo:
[ -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
¿Puedo reemplazar esto con:
[ -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
¿Funcionará en OS X? ¿Es ese el problema de "POSIX"?
Lo intenté y lo anterior todavía parece funcionar en Ubuntu (por lo que en realidad funcionan con ambos sourcey ., es decir, me dan la funcionalidad deseada en el shell). ¿Debo elegir uno sobre el otro, o me estoy perdiendo algo?
FWIW, en OS X, obtengo mi .bashrcde mi .bash_profile.

sourceejecuta el script en el shell actual y por.separado"? Ambos lo ejecutan en el shell actual; de lo contrario no tendría sentidoRespuestas:
Esta es la definición de POSIX de
.dot:Teniendo en cuenta lo anterior, también podría reemplazarlo
[ -f ./file ] && source ./filepor. ./filecompleto. Si el archivo no está allí, lo peor que sucederá es que recibirás un aviso al iniciar sesión, que probablemente sea la información que quieras tener, creo.Por supuesto, si prefiere mantener la prueba, podría hacer:
fuente
$_, me gusta eso. :)test -f /.file && . $_enfoque que se muestra aquí$_no está estandarizado por POSIX. Los 8 parámetros especiales son$@,$*,$#,$$,$!,$?,$-y$0.$_se omite de forma explícita . Su comentario incorrecto provocó una pregunta .En
bash,.ysourceson sinónimos. Mirando elbashcódigo fuente, el archivobuiltin/source.def, puede ver.ysourceusar la misma función internasource_builtin:Pero
sourceno es compatible con POSIX, por lo que si su secuencia de comandos se llama con POSIX/bin/sh, debe usar en.lugar desource. Dado que POSIX no restringe el shell, todo su script anterior funcionará.Personalmente, siempre uso en
.lugar desource. (Muchos scripts que escribí se ejecutan bajocron).fuente
.es generalmente "mejor" que usarsource, como dice @abonet,sourcees mucho más fácil de buscar. Dado que los períodos son signos de puntuación en muchos idiomas, es fácil para el ojo saltarselos. Por eso prefiero usarsource.