Redirection Error in Function [fechado]

0

Estou tentando descobrir por que o código abaixo não funciona e me dá um erro Bad file descriptor . É uma espécie de follow-up para esta questão como se aplica ao script no qual estou trabalhando atualmente.

Logo no início do chamador, exec 3>&1 é executado e nada mais tarde explicitamente o altera antes que a função (generalizada) abaixo seja assim chamada:

exec 3>&1
...
string=$(GetString)

GetString se parece com isso:

GetString()
{
    4>&1 1>&3    #save pipe end and change output back to caller's
    controlvar=0

    while ((controlvar != 1))
    do    
        printf "some stuff for the interactive user\n"
        read -p "my prompt" variable
        if ValidationFunction $variable; controlvar=1;fi    #tests for valid input
    done
    exec 1>&4-    #change output back to pipe end
    echo $variable
}

Estou recebendo o erro Bad file descriptor da segunda à última linha.

O que está acontecendo aqui? Note que eu também não estou fazendo nada explicitamente com fd / 4 em outro lugar no script.

    
por BryKKan 18.03.2016 / 23:15

1 resposta

2

Existem vários problemas com sua pergunta.

A linha

4>&1 1>&3

Está faltando um exec:

exec 4>&1 1>&3

E a linha:

exec 1>4&-

Deve ler

exec 1>&4-

Um script simplificado deve ficar assim:

GetString()
{
    exec 4>&1 1>&3    #save pipe end and change output back to caller's
    printf "some stuff for the interactive user\n"
    sleep 3    
    exec >&4-         #change output back to pipe end
    echo "test value"
}

exec 3>&1
string=$(GetString)
echo "final value <$string>"

Este script faz sentido.

Edite a pergunta para realmente reproduzir seu problema.

    
por 19.03.2016 / 01:48