Подтвердить что ты не робот

Эквивалент `__FILE__`,` __LINE__` в bash

Есть ли какая-либо переменная в bash, которая содержит имя исполняемого файла .sh?
Номер строки также будет большим.

Я хочу использовать его в сообщениях об ошибках, таких как:
echo "ОШИБКА: [$ ФАЙЛ: L $LINE] $somefile не найден"

4b9b3361

Ответ 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.