O que é o comando “chamador”?

11

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?

    
por Gilles 24.08.2011 / 15:36

3 respostas

14

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.

    
por 24.08.2011 / 15:49
8

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.

    
por 20.12.2015 / 14:12
2

É um comando interno do shell: man bash (Em seguida, pesquise por 'chamador')
Pode ser usado para imprimir um rastreamento de pilha.

    
por 24.08.2011 / 15:50