Эквивалентный из __ ФАЙЛ __ и __ СТРОКА __ в Bash

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

Я хочу использовать его в сообщениях об ошибках, таких как:

echo "ERROR: [$FILE:L$LINE] $somefile not found"
32
задан codeforester 15 May 2018 в 19:07
поделиться

3 ответа

#!/bin/bash

echo $LINENO
echo `basename $0`

$ LINENO для текущего номера строки $ 0 для текущего файла. Я использовал базовое имя , чтобы гарантировать, что вы получите только имя файла, а не путь.

ОБНОВЛЕНИЕ:

#!/bin/bash

MY_NAME=`basename $0`

function ouch {
   echo "Fail @ [${MY_NAME}:${1}]"
   exit 1
}

ouch $LINENO

Вы должны передать строку как параметр, если вы используете функциональный подход, иначе вы получите строку с определением функции.

30
ответ дан 27 November 2019 в 20:32
поделиться

Я считаю очень полезными встроенные массивы "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
23
ответ дан 27 November 2019 в 20:32
поделиться

Вам просто нужно

echo $LINENO
echo $(basename $0)
6
ответ дан 27 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: