Эквивалент `__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.