Apa perintah "penelepon"?


12

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:


16

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.


3
Luar biasa. Saya tidak hanya belajar apa yang dilakukan perintah itu, saya juga belajar perintah "ketik". Terima kasih :)

2
TIL bash memiliki helpperintah
bawaan

Yang saya bisa pilih dua kali untuk mengajar tidak hanya jawabannya tetapi juga prosesnya.
dmckee --- ex-moderator kitten

@Muu, @nibot, @dmckee: juga type type, type help, help typedan help helpbisa menyenangkan untuk menjalankan :)
enzotib

10

Perintah calleris 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 diefungsi 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.


2

Ini adalah perintah shell builtin: man bash(Kemudian cari 'pemanggil')
Ini dapat digunakan untuk mencetak jejak tumpukan.


Terima kasih meskipun saya memilih jawaban enzotib karena dia juga mengajari saya 'mengetik'. Terima kasih banyak :)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.