¿Alguien puede explicarme qué hace el shell en los dos ejemplos A) y B) a continuación? Obviamente se comporta de manera diferente, pero no puedo descubrir por qué la salida es diferente.
Ejemplo:
Tengamos un script en nuestro directorio actual nombrado bla.sh
con un solo comando:
echo ${0##/*} hello
A)
Comenzó como: ./bla.sh
da:./bla.sh hello
B)
Comenzó como: . bla.sh
da:-bash hello
Como uso esto en una secuencia de comandos, la segunda salida (debido a "-" delante de -bash) mata el comando. Por supuesto, un simple --
antes de la ${...}
ayuda, pero me encantaría entender qué causa la salida en primer lugar.
Me encanta bash Y vi [m]. Pero yo divago…
source
es un alias bash para.
, no al contrario, ysource
no funcionará en otros shells../<cmd>
ejecutará el<cmd>
programa que reside en el directorio actual en un nuevo proceso (bifurcado). Tiene que ser ejecutable. Y también legible comienza con#!
.. <cmd>
hará que su shell actual ejecute el script de shell<cmd>
que reside en su$PATH
directorio actual o en el proceso actual del shell. Tiene que ser legible. Es un alias para el comando de shellsource
.fuente
. <cmd>
buscará el programa$PATH
y, si no se encuentra ENTONCES, buscará en el directorio actual.. ./cmd
./cmd
usa una ruta explícita (./
- directorio actual) al ejecutable. Y no es necesario que comience con#!
.. cmd
- (akasource
) - comando bash incorporado. Una diferencia visible de la ejecuciónsource
es que puede establecer / modificar la variable de entorno del shell actual.fuente
source
es un alias de bash-only para.
(que es estándar)