numaralı telefon hattında yanlış satır numarası veriyor Bash kapanı işlevinde caller yerleşimini kullanırken, caller 0
sonucu yanlış satır numarası veriyor ve her zaman 1
veriyor. her zaman hat numarası olarak 1
vermek gibi görünen bir tuzak işleyicisindeki caller 0
kullanırken i > 0
için çıkış, doğru olsaarayan 0, trap işleyicisinde
1 foo ./test.sh
6 bar ./test.sh
15 main ./test.sh
: Örneğin:
#!/bin/bash
function foo {
exit 1
}
function bar {
foo
}
function err {
((i = 0))
while caller $i; do
((++i))
done
}
trap err EXIT
bar
şu çıktıyı verir. Başarısız fonksiyonun gerçek satır numarasını bir tuzak işleyicisinden almanın bir yolu var mı?
'BASH_LINENO' dizisi arkadaşınız. (Yani "FUNCNAME" ve "BASH_SOURCE"). –
@CharlesDuffy Ne yazık ki 'BASH_LINENO' sadece '0' – Xenopathic
... '1' ile aynı şeyi veriyor ve bu yüzden "trap 'err" $ LINENO "''. Açıkçası, hiç bir zaman EXIT tuzaklarını bu şekilde kullandığını görmedim. Muhtemelen hiç kimse test etmekten rahatsız olmadı. Bir ERR tuzağı kullanmak çok daha az olağandışı olurdu. –