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