Czy w bashie jest zmienna zawierająca nazwę pliku .sh?
Numer linii też byłby świetny.Równoważnik `__FILE__`,` __LINE__` w bashu
chcę go używać w komunikatach o błędach, takich jak:
echo "ERROR: [$ FILE: L $ LINE] $ somefile nie znaleziono"
Czy w bashie jest zmienna zawierająca nazwę pliku .sh?
Numer linii też byłby świetny.Równoważnik `__FILE__`,` __LINE__` w bashu
chcę go używać w komunikatach o błędach, takich jak:
echo "ERROR: [$ FILE: L $ LINE] $ somefile nie znaleziono"
#!/bin/bash
echo $LINENO
echo `basename $0`
$LINENO
dla bieżącego numeru linii $0
dla bieżącego pliku. Użyłem basename
, aby upewnić się, że otrzymujesz tylko nazwę pliku, a nie ścieżkę.
UPDATE:
#!/bin/bash
MY_NAME=`basename $0`
function ouch {
echo "Fail @ [${MY_NAME}:${1}]"
exit 1
}
ouch $LINENO
musiał przejść linię jako parametr w przypadku korzystania z funkcji innego podejścia dostaniesz linii definicji funkcji.
Zmienna $ 0. daje nazwę powłoki wykonującego skrypt w bashu.
Wystarczy
echo $LINENO
echo $(basename $0)
'basename $ 0' (nie jest konieczne" echo ") –
znajdę "BASH_SOURCE" i "BASH_LINENO" wbudowane w układach bardzo użyteczne:
$ 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"
Wywoływanie plony xx
2010-06-16.15:33:13.069 xx[11]: here
2010-06-16.15:33:13.073 xx[14]: and here
Wolę też używać zmiennych BASH_ *, tak jak je opisałeś. Oto dobry artykuł na temat debugowania skryptów bash, o których pisałem w przeszłości: http://aymanh.com/how-debug-bash-scripts –
to jest piękne –
'basename $ 0' (nie trzeba "echo") –
Zwróć uwagę, że jeśli 'source' skryptu,' basename $ 0' zwróci skrypt macierzysty. – scribu
A także to nie działa dobrze w skryptach z załadowaną powłoką logowania (~/.bashrc, /etc/profile.d/*). "BASH_SOURCE" i "BASH_LINENO" są znacznie lepsze, chociaż są bashisms. – pevik