Trabajando en algunas funciones de bash, no conocía el source ...
comando, así que usé en su eval $(cat ...)
lugar. Ahora me pregunto, ¿cuándo debería cambiar cada uso de eso, o es simplemente la misma función?
Parecen funcionar igual ahora, pero tal vez habrá algunas diferencias engañosas más tarde, solo quiero saber.
command-line
bash
Benjamín
fuente
fuente
eval "$(cat file)"
source
ya que es un comando hecho específicamente para esto.Como ya lo mencionó @glennjackman, querrás citar la sustitución del comando; de lo contrario, la división de palabras y la expansión del nombre de ruta modificarán el contenido antes de que se evada. Y aunque ambos ejecutarán los comandos del archivo, hay diferencias.
Cuando la fuente de un guión, diversas variables especiales de shell serán modificados, sobre todo el
BASH_SOURCE
,BASH_LINENO
yFUNCNAME
matrices. Estos son útiles para imprimir mensajes de error y depuración.Puede regresar de un script de origen con el
return
comando (help return
). Con la evaluación, no obtendrá ese efecto. Y de manera similar, no se activará una trampa de RETORNO para la evaluación.Al buscar un script, puede pasarle argumentos. No puedes hacer eso con esa evaluación.
Con la evaluación, la sustitución del comando leerá todo el contenido del archivo en la memoria antes de pasarlo a evaluación. Cuando lo obtengas, bash leerá el archivo a medida que avanza.
fuente
Hay un buen resumen de lo que hacen la fuente, eval y exec aquí: http://www.unix.com/shell-programming-scripting/54347-bash-shell-exec-eval-source-looking-help-understand.html
Creo que su uso de eval y la fuente del archivo hará lo mismo. Sin embargo, no estoy completamente seguro de que las variables dentro del subíndice se comporten igual en cualquier caso. Recomendaría usar la fuente si es posible, porque es la forma más sencilla de hacerlo y hace que su código sea más legible.
fuente
$(cat file)
->$(< file)