Tengo un script que está plagado alrededor de mi sistema de archivos (efecto secundario de un proceso de compilación) que establece algunas variables de entorno globales (LD_LIBRARY_PATH, PATH, ROOTDIR, etc.) que deben estar en mi shell para una operación adecuada. Por supuesto, eso significa que necesito source script.sh
o . script.sh
para que funcione, y no ./script.sh
(lo que generaría un nuevo shell y no establecería las variables en mi shell actual).
¿Hay algo que pueda agregar al script para evitar (o advertir) que alguien se ejecute ./script.sh
?
Otra opción puede ser eliminar los permisos de ejecución. En ese caso, no se puede ejecutar, pero aún se puede obtener.
fuente
bash script
independientemente de la marca de ejecución en un script. También bajo Cygwin (¿cuenta esto?) No puede quitar las banderas de ejecución.Además de marcar $ 0 ( respuesta de Mikel ) puede ser útil para cambiar la extensión de .sh a .src, por ejemplo. Ayudará a entender a cualquiera que no deba ejecutar este script.
fuente
Crea un intérprete personalizado
source_reminder
:No te olvides de hacerlo ejecutable. Luego, úsalo en tu script:
Ahora, si ejecuta el script sin fuente, el recordatorio hará su trabajo.
fuente
#!/bin/echo do not execute
o#!/bin/false
o#!/usr/bin/awk BEGIN { print "you must source " ARGV[1]; exit(1) }
. Sin embargo, esto no detecta el caso donde el script se ejecuta con algo comosh script
(ya que esto ignora el Shebang).