set -xv comportamento em ksh vs bash

2

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

exec 2> somefile
set -xv

Esse trabalho vai muito bem no bash, mas tenho notado no ksh que ele se comporta de maneira diferente quando se trata de funções. Notei que quando faço isso em ksh, a saída não mostra o traço 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 do ksh de:

function doSometime {....}

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

doSomething() {....}

O rastreamento funciona conforme o esperado. É possível obter set -xv para trabalhar o mesmo com os dois tipos de declarações de função? Eu tentei export SHELLOPTS e isso não fez diferença.

Estou usando o ksh93 no Solaris 11.

    
por Peter 15.10.2014 / 19:01

1 resposta

2

Da documentação:

Functions defined by the function name syntax and called by name execute in the same process as the caller and share all files and present working directory with the caller. Traps caught by the caller are reset to their default action inside the function.

Considerando que

Functions defined with the name() syntax and functions defined with the function name syntax that are invoked with the . special built-in are executed in the caller's environment and share all variables and traps with the caller.

A solução é não usar a palavra-chave function ; manter a forma padrão de definições de funções.

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

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 interromper o rastreamento de todas as funções: typeset +tf $(typeset +tf)

    
por 15.10.2014 / 20:24