Executar
type caller
e você verá que é um shell embutido. Correndo
help caller
mostrará sua função, reportada também na página de manual do bash. Brevemente
Return the context of the current subroutine call.
Estou executando o Ubuntu 10.10 com o openbox rodando no topo. Eu notei hoje um comando chamado caller
, no entanto, não há nenhuma página man, ele não responde a nenhuma entrada (ou --help) e onde não o encontra.
Alguma ideia do que é isso?
O comando caller
is builtin (não especificado pelo POSIX) apareceu na versão 3.0 do Bash e retorna o contexto de qualquer chamada de sub-rotina ativa. Veja: Bash-Builtins para mais leitura.
Sintaxe:
caller [FRAMENUMBER]
Se número do quadro é fornecido como um número inteiro não negativo, ele exibe o número da linha, o nome da sub-rotina e o arquivo fonte correspondente a essa posição na pilha de chamadas de execução atual.
Sem nenhum parâmetro, o chamador exibe o número da linha e o nome do arquivo fonte da chamada atual da sub-rotina.
Verifique o seguinte Rastreamento de pilha simples no 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
Saída:
12 f1 ./callertest.sh
13 f2 ./callertest.sh
14 f3 ./callertest.sh
16 main ./callertest.sh
*** an error occured ***
Aqui está uma amostra de uma função die
decente para rastrear erros em scripts moderadamente complexos:
{ bash /dev/stdin; } <<<$'f(){ g; }\ng(){ h; }\nh(){ while caller $((n++)); do :; done; }\nf'
For more sophisticated debugging, Bash extended debugging features are available and a number of special parameters that give more detail than caller (e.g.
BASH_ARG{C,V}
). Tools such as Bashdb can assist in using some of Bash's more advanced debug features.
É um comando interno do shell: man bash
(Em seguida, pesquise por 'chamador')
Pode ser usado para imprimir um rastreamento de pilha.