Adicionando scrabbles de saída de depuração resultam da função

1

Eu tenho uma função que retorna um valor.
Mas gostaria de adicionar alguns echo s para facilitar a depuração. Mas isso destrói o resultado.
Exemplo:

function foo {
   echo "In foo"
   VAR="1234"
   echo "Calculated item"
   echo "$VAR"
}

RESULT=$(foo)
echo "RESULT=$RESULT"

Eu esperava obter 1234 .
Em vez disso, a saída é:

RESULT=In foo  
Calculated item  
1234

Qual é a maneira correta de corrigir isso?

    
por Jim 30.03.2018 / 13:20

1 resposta

3

Redirecionar a saída de depuração para o erro padrão:

foo () {
   echo 'In foo' >&2
   VAR="1234"
   echo 'Calculated item' >&2
   echo "$VAR"
}

RESULT=$(foo)
printf 'RESULT="%s"\n' "$RESULT"

Você pode até mesmo criar uma função de "depuração" dedicada:

debug () {
    printf 'DEBUG: %s\n' "$@" >&2
}

foo () {
   debug 'In foo'
   VAR="1234"
   debug 'Calculated item'
   echo "$VAR"
}

RESULT=$(foo)
printf 'RESULT="%s"\n' "$RESULT"

Saída:

$ sh script.sh
DEBUG: In foo
DEBUG: Calculated item
RESULT="1234"
    
por 30.03.2018 / 13:30