No bash, posso escrever:
caller 0
e receba o contexto do chamador :
- Número da linha
- Função
- Nome do script
Isso é extremamente útil para depuração. Dado:
yelp () { caller 0; }
Eu posso então escrever yelp
para ver quais linhas de código estão sendo alcançadas.
Eu posso implementar caller 0
em bash
como:
echo "${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]"
Como posso obter a mesma saída que caller 0
em zsh
?
Eu não acho que haja um comando embutido equivalente, mas alguma combinação dessas quatro variáveis do módulo zsh/Parameter pode ser usada:
Comparando:
foo.bash
:foo.zsh
:Os resultados:
Assim, os valores correspondentes estão em
${funcfiletrace[1]}
e${funcstack[-1]}
. Modificandoyelp
para:A saída é:
que é bem próximo do bash
Com base na resposta de muru , implementei a seguinte função que funciona em ambos
{ba,z}sh
:A saída é: