Saya menjalankan Ubuntu 10.10 dengan openbox berjalan di atas. Saya perhatikan hari ini perintah yang disebut caller
, namun tidak ada halaman manual, itu tidak menanggapi input (atau --help) dan di mana tidak menemukannya.
Tahu apa kira-kira ini?
Saya menjalankan Ubuntu 10.10 dengan openbox berjalan di atas. Saya perhatikan hari ini perintah yang disebut caller
, namun tidak ada halaman manual, itu tidak menanggapi input (atau --help) dan di mana tidak menemukannya.
Tahu apa kira-kira ini?
Jawaban:
Lari
type caller
dan Anda akan melihat itu adalah built-in shell. Lari
help caller
akan menunjukkan fungsinya, dilaporkan juga di halaman manual bash. Secara singkat
Return the context of the current subroutine call.
help
perintah
type type
, type help
, help type
dan help help
bisa menyenangkan untuk menjalankan :)
Perintah caller
is builtin (tidak ditentukan oleh POSIX) muncul di Bash versi 3.0 dan mengembalikan konteks semua panggilan subrutin yang aktif. Lihat: Bash-Builtins untuk membaca lebih lanjut.
Sintaksis:
caller [FRAMENUMBER]
Jika nomor bingkai diberikan sebagai bilangan bulat non-negatif, itu akan menampilkan nomor baris, nama subrutin, dan file sumber yang sesuai dengan posisi itu dalam tumpukan panggilan eksekusi saat ini.
Tanpa parameter apa pun, pemanggil menampilkan nomor baris dan nama file sumber panggilan subrutin saat ini.
Periksa jejak tumpukan sederhana berikut di Bash Hackers Wiki :
#!/bin/bash
die() {
local frame=0
while caller $frame; do
((frame++));
done
echo "$*"
exit 1
}
f1() { die "*** an error occured ***"; }
f2() { f1; }
f3() { f2; }
f3
Keluaran:
12 f1 ./callertest.sh
13 f2 ./callertest.sh
14 f3 ./callertest.sh
16 main ./callertest.sh
*** an error occured ***
Berikut adalah contoh die
fungsi yang layak untuk melacak kesalahan dalam skrip yang cukup kompleks:
{ bash /dev/stdin; } <<<$'f(){ g; }\ng(){ h; }\nh(){ while caller $((n++)); do :; done; }\nf'
Untuk debugging yang lebih canggih, fitur debugging Bash diperpanjang tersedia dan sejumlah parameter khusus yang memberikan lebih detail daripada pemanggil (mis
BASH_ARG{C,V}
.). Alat-alat seperti Bashdb dapat membantu dalam menggunakan beberapa fitur debug Bash yang lebih canggih.