1. Como exibir no sysout de um script o nome da função chamada em caso de erro? [RESOLVIDO]
mlgrassiusa Debian
Post recolhido
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
}
3. Re: Como exibir no sysout de um script o nome da função chamada em caso de erro? [RESOLVIDO]
Mauriciodezusa Debian
Post recolhido
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]
mlgrassiusa Debian
Post recolhido
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]
removidousa Nenhuma
Post recolhido
Enviado em 18/07/2017 - 18:59h
Valeu pela explicação. Vou até favoritar. Espero não me esquecer.