definir comportamento -xv em ksh vs bash

definir comportamento -xv em ksh vs bash

Normalmente gosto que toda a saída de depuração de um script vá para um arquivo, então terei algo como:

exec 2> somefile
set -xv

Isso funciona muito bem no bash, mas notei que no ksh ele se comporta de maneira diferente quando se trata de funções. Percebi que quando faço isso no ksh, a saída não mostra o rastreamento da função, apenas que a função foi chamada.

Ao fazer alguns testes adicionais, notei que o comportamento também depende de como a função foi declarada, se eu usar a sintaxe ksh de:

function doSometime {....}

Tudo o que vejo é a chamada da função, porém se declarar a função usando o outro método, por exemplo

doSomething() {....}

O rastreamento funciona conforme o esperado. É possível trabalhar set -xvda mesma forma com os dois tipos de declarações de função? Eu tentei export SHELLOPTSe isso também não fez diferença.

Estou usando o ksh93 no Solaris 11.

Responder1

Da documentação:

Funções definidas pelofunção nomesintaxe e chamado pelo nome são executados no mesmo processo que o chamador e compartilham todos os arquivos e apresentam o diretório de trabalho com o chamador. As armadilhas capturadas pelo chamador são redefinidas para sua ação padrão dentro da função.

Enquanto

Funções definidas com onome() sintaxe e funções definidas com a sintaxe do nome da função que são invocadas com o . integrados especiais são executados no ambiente do chamador ecompartilhe todas as variáveis ​​e armadilhas com o chamador.

A solução é não usar a functionpalavra-chave; atenha-se à forma padrão de definições de funções.

Alternativamente, se você estiver interessado apenas em algumas funções, typeset -tf fnameapenas rastreará a função fname(se ela foi definida com a functionpalavra-chave).

Para interromper o rastreamento:typeset +tf fname

Para rastrear todas essas funções no ksh93:typeset -tf $(typeset +f)

Para ver quais funções são rastreadas:typeset +tf

Para parar de rastrear todas as funções:typeset +tf $(typeset +tf)

informação relacionada