world script hello example basics bash macros equivalent

script - Equivalente a `__FILE__`,`__LINE__` en bash



linux sh script example (4)

¿Hay alguna variable en bash que contenga el nombre del archivo .sh ejecutado?
El número de línea sería genial también.

Quiero usarlo en mensajes de error como:
echo "ERROR: [$ FILE: L $ LINE] $ somefile not found"


La variable $ 0 le dará el nombre del script de shell en ejecución en bash.


Solo necesitas

echo $LINENO echo $(basename $0)


#!/bin/bash echo $LINENO echo `basename $0`

$LINENO para el número de línea actual $0 para el archivo actual. Utilicé basename para asegurarme de que solo recibas el nombre del archivo y no la ruta.

ACTUALIZAR:

#!/bin/bash MY_NAME=`basename $0` function ouch { echo "Fail @ [${MY_NAME}:${1}]" exit 1 } ouch $LINENO

Tienes que pasar la línea como un parámetro si usas el enfoque de la función, de lo contrario obtendrás la línea de la definición de la función.


Las matrices incorporadas "BASH_SOURCE" y "BASH_LINENO" son muy útiles:

$ cat xx #!/bin/bash _ERR_HDR_FMT="%.23s %s[%s]: " _ERR_MSG_FMT="${_ERR_HDR_FMT}%s/n" error_msg() { printf "$_ERR_MSG_FMT" $(date +%F.%T.%N) ${BASH_SOURCE[1]##*/} ${BASH_LINENO[0]} "${@}" } error_msg "here" error_msg "and here"

Invocar rendimientos xx

2010-06-16.15:33:13.069 xx[11]: here 2010-06-16.15:33:13.073 xx[14]: and here