OK, entonces source
ejecuta 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 .bashrc
archivo, 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 source
y .
, 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 .bashrc
de mi .bash_profile
.
source
ejecuta 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 ./file
por. ./file
completo. 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
,.
ysource
son sinónimos. Mirando elbash
código fuente, el archivobuiltin/source.def
, puede ver.
ysource
usar la misma función internasource_builtin
:Pero
source
no 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,source
es 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
.