bash - declaração de retorno e impressão

0

Eu tenho uma função bash que retorna um número adicionando 20 a ele. Ao mesmo tempo, gostaria de exibir para ver qual é a entrada.

function add_nos {
    echo "$1"
    echo $(($1 + 20))
    return 1
}

result='add_nos $1'
echo $result

Quando eu executo o seguinte comando -

bash setup.sh 10

Eu recebo a seguinte saída -

10 30

Como posso diferenciar entre os 2 stmts; ou seja, o primeiro eco é para depuração e o segundo é para o valor de retorno.

    
por user1050619 12.03.2018 / 16:01

2 respostas

3

Talvez imprima a instrução de depuração com erro padrão em vez da saída padrão?

echo "$1" >&2
    
por choroba 12.03.2018 / 16:03
0

Retorno

O valor return é armazenado em $? após cada chamada de comando / função. Tente isso para acessá-lo:

function add_nos {
    echo "$1"
    echo $(($1 + 20))
    return 1
}

result='add_nos $1'
retval=$?  # this is the "return" value of "add_nos"
echo "result: $result"
echo "return: $retval"

Veja a página man . Também esta questão e este artigo .

Stderr

Como outra resposta sugerida, stderr é um bom lugar para enviar saída de depuração. Você também pode fazer muito mais do que apenas um valor de retorno. Tente isto:

function add_nos {
    echo "input: $1" >&2
    echo $(($1 + 20))
    echo "done now!" >&2
}

echo "starting script" >&2
result='add_nos $1'
echo "result: $result"

Em seguida, execute-o com e sem saída de depuração por redirecionando stderr :

$ bash setup.sh 10  
starting script
input: 10
done now!
result: 30

$ bash setup.sh 10 2>/dev/null
result: 30

$ bash setup.sh 10 2>logfile
result: 30

$ cat logfile
starting script
input: 10
done now!
    
por P1h3r1e3d13 12.03.2018 / 17:50