2010-06-16 9 views
22

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

quiero utilizarlo en mensajes de error como:
echo "ERROR: [$ FILE: L $ LINE] $ somefile no encontrado"

Respuesta

20
#!/bin/bash 

echo $LINENO 
echo `basename $0` 

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

ACTUALIZACIÓN:

#!/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 se utiliza el enfoque de la función de lo contrario obtendrá la línea de la definición de la función.

+3

'nombrebase $ 0' (no es necesario 'echo') –

+3

Tenga en cuenta que si' fuente' el guión, 'basename $ 0' devolverá el script principal. – scribu

+2

Y también esto no está funcionando bien en las secuencias de comandos cargadas shell de inicio de sesión (~/.bashrc, /etc/profile.d/*). "BASH_SOURCE" y "BASH_LINENO" son mucho mejores, aunque son bashisms. – pevik

2

La variable $ 0 hará le dará el nombre de la cáscara de la ejecución script en bash.

6

sólo tiene que

echo $LINENO 
echo $(basename $0) 
+0

'nombre base $ 0' (no es necesario' echo') –

15

encuentro el "BASH_SOURCE" y matrices incorporadas muy útiles "BASH_LINENO":

$ 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" 

Invocación rendimientos xx

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

También prefiero usar las variables BASH_ * tal como las ha descrito. Aquí hay un buen artículo sobre cómo depurar las secuencias de comandos bash a las que he hecho referencia en el pasado: http://aymanh.com/how-debug-bash-scripts –

+0

esto es hermoso –

Cuestiones relacionadas