Эквивалент `__FILE__`,` __LINE__` в bash Есть ли какая-либо переменная в bash, которая содержит имя исполняемого файла .sh? Номер строки также будет большим. Я хочу использовать его в сообщениях об ошибках, таких как: echo "ОШИБКА: [$ ФАЙЛ: L $LINE] $somefile не найден" Ответ 1 #!/bin/bash echo $LINENO echo `basename $0` $LINENO для текущего номера строки $0 для текущего файла. Я использовал basename, чтобы вы получили только имя файла, а не путь. UPDATE: #!/bin/bash MY_NAME=`basename $0` function ouch { echo "Fail @ [${MY_NAME}:${1}]" exit 1 } ouch $LINENO Вам нужно передать строку в качестве параметра, если вы используете функциональный подход, иначе вы получите строку определения функции. Ответ 2 Я считаю, что встроенные массивы "BASH_SOURCE" и "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" Вызов xx дает 2010-06-16.15:33:13.069 xx[11]: here 2010-06-16.15:33:13.073 xx[14]: and here Ответ 3 Вам просто нужно echo $LINENO echo $(basename $0) Ответ 4 Переменная $0 даст вам имя исполняющей оболочки script в bash.
Ответ 1 #!/bin/bash echo $LINENO echo `basename $0` $LINENO для текущего номера строки $0 для текущего файла. Я использовал basename, чтобы вы получили только имя файла, а не путь. UPDATE: #!/bin/bash MY_NAME=`basename $0` function ouch { echo "Fail @ [${MY_NAME}:${1}]" exit 1 } ouch $LINENO Вам нужно передать строку в качестве параметра, если вы используете функциональный подход, иначе вы получите строку определения функции.
Ответ 2 Я считаю, что встроенные массивы "BASH_SOURCE" и "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" Вызов xx дает 2010-06-16.15:33:13.069 xx[11]: here 2010-06-16.15:33:13.073 xx[14]: and here