Cuando obtiene un script de shell, se ignora la línea shebang . Al colocar un shebang no válido, puede alertar al usuario de que el script se ejecutó erróneamente:
#!/bin/bash source-this-script
# ...
El mensaje de error será este:
/bin/bash: source-this-script: No such file or directory
El nombre del argumento (arbitrario) ya proporciona una pista fuerte, pero el mensaje de error aún no es 100% claro. Podemos arreglar esto con un script de utilidad source-this-script
que se coloca en algún lugar de su PATH
:
#!/bin/sh
echo >&2 "This script must be sourced, not executed${1:+: }${1:-!}"
exit 1
Ahora, el mensaje de error será este:
This script must be sourced, not executed: path/to/script.sh
Comparación con otros enfoques
En comparación con las otras respuestas, este enfoque solo requiere cambios mínimos en cada script (y tener una línea shebang ayuda con la detección del tipo de archivo en los editores y especifica el dialecto del script de shell, por lo que incluso hay beneficios). La desventaja es un mensaje de error algo poco claro, o la adición (única) de otro script de shell.
Sin embargo, no evita la invocación explícita a través de bash path/to/script.sh
(¡gracias @muru!).
x
, que solo contiene el comando. your-script-to-be-sourced
, está bien, pero si desea ejecutarlobash your-script-to-be-sourced
, ¿debería estar prohibido? ¿Cuál es el punto de esta restricción?env
variables y las deja como resultado de la secuencia de comandos de facto . Un novato se quedará atrapado durante días con el rompecabezas si les permite ejecutar.if __name__ == '__main__'
?