Como exibir no sysout de um script o nome da função chamada em caso de erro? [RESOLVIDO]

1. Como exibir no sysout de um script o nome da função chamada em caso de erro? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 17/07/2017 - 21:42h

Durante a execução de um script qualquer em shell, se em algum trecho de seu contendo contiver o $0 (geralmente utilizado para referenciar erros) irá retornar o nome do script chamador, por exemplo:

##SCRIPT teste.sh##
if [ -z "$1" ];then
echo "ERRO: Falta informar o parametro do script. Usage $0 parametro";
fi


Mas como fazemos a mesma coisa só que em funções? Ex:


function faz_alguma_coisa {
if [ -z "$1" ];then
echo "ERRO: Falta informar parametro na função. Usage (?????) parametro";
fi
}




  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/07/2017 - 22:11h

Encontrei um link, mas estou com preguiça de decifrar:

https://stackoverflow.com/questions/1835943/how-to-determine-function-name-from-inside-a-function

3. Re: Como exibir no sysout de um script o nome da função chamada em caso de erro? [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 17/07/2017 - 22:02h

mlgrassi escreveu:

Durante a execução de um script qualquer em shell, se em algum trecho de seu contendo contiver o $0 (geralmente utilizado para referenciar erros) irá retornar o nome do script chamador, por exemplo:

...
Mas como fazemos a mesma coisa só que em funções? Ex:
...


se eu não me engano é chamando a função
function faz_alguma_coisa {
if [ -z "$1" ];then
echo "ERRO: Falta informar parametro na função. Usage (?????) parametro";
fi
}
faz_alguma_coisa




------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------



4. Re: Como exibir no sysout de um script o nome da função chamada em caso de erro? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 18/07/2017 - 17:24h

Muito obrigado !

Este link me ajudou, e assim compartilho com os visitantes do VOL a resposta à minha pergunta.

Quando declaramos uma função, o shell irá criar e popular um vetor padrão denominado FUNCNAME o qual terá a quantidade de índices e valores criados de acordo com as seguintes situações:

1) Se a função é declarada diretamente no terminal do shell
A quantidade de índices será igual ao número de funções declaradas individualmente, ou seja, se tivermos por exemplo 3 funções declaradas, como logicamente são executadas sequencialmente, a cada chamada o shell irá criar um vetor com 1 índice e atribuir como valor o nome da função.
Se uma função estiver dentro de outra função e assim sucessivamente, o número de índices será proporcional a isso

2) Se a função estiver dentro de um script
A quantidade de índices será igual ao número de funções individuais declaradas, ou funções dentro de funções + 1.
Esse +1 refere-se a função oculta main utilizada quando se executam scripts shell.
Ao exibirmos todo o conteúdo de FUNCNAME:
echo ${FUNCNAME[@]} 
serão exibidas todas as funções em ordem decrescente + a função main.
No entanto, como falado anteriormente, para cada função, há um FUNCNAME diferente sendo que a quantidade de índices será sempre 2, exceto para caso houver uma função dentro da outra.

Segue um exemplo para entendermos melhor

Exemplo:

function primeira {
echo "Imprimindo ${FUNCNAME[@]}";
}

function segunda {
echo "Imprimindo ${FUNCNAME[@]}";
primeira;
}

function externa {
echo "Imprimindo ${FUNCNAME[@]}";
function interna {
echo "Imprimindo ${FUNCNAME[@]}";
}
interna;
}
primeira;
segunda;
externa;


Executando este código através de um script a saída será:
Imprimindo primeira main
Imprimindo segunda main
Imprimindo primeira segunda main
Imprimindo externa main
Imprimindo interna externa main


Agora executando o mesmo código diretamente no terminal shell, a saída será:

Imprimindo primeira
Imprimindo segunda
Imprimindo primeira segunda
Imprimindo externa
Imprimindo interna externa



5. Re: Como exibir no sysout de um script o nome da função chamada em caso de erro? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/07/2017 - 18:59h

Valeu pela explicação. Vou até favoritar. Espero não me esquecer.

Você deveria criar uma dica.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts