
Teniendo un guión simple:
echo "file: $0"
cuando se invoca así:
bash myscript.sh
o
./miscript.sh
proporciona el nombre de archivo del script ( file: myscript.sh
) como se esperaba, pero cuando se invoca:
fuente myscript.sh
o
. ./miscript.sh
proporciona el nombre del shell ( bash
) en lugar del nombre del archivo del script.
¿Por qué es como este?
Respuesta1
La primera llamada iniciará una nueva instancia de bash para interpretar el script, lo que significa que bash establecerá $0
su ruta.
La segunda llamada tratará el archivo como ejecutable y lo ejecutará, por lo que $0
lo señalará.
Las dos últimas llamadas cargarán el archivo en la instancia actual de bash, por lo que $0
apuntarán allí.
NB: #2 necesita que el archivo sea ejecutable, #1, #3 y #4 no.