ecoando um valor de uma função BASH após um comando ter sido executado em segundo plano

1

Estou tentando executar o seguinte, como um teste para outra coisa:

function echo_test {
  sleep 60 & > /dev/null
  returnpid=$!
  echo $returnpid
}

pidthatwasreturned=$(echo_test)

echo "This was the value that was returned by the function:"
echo $pidthatwasreturned

O problema é que a função não sai e retorna até que o sono termine, mesmo que tenha sido executado em segundo plano. No script que estou desenvolvendo, o comando sleep será efetivamente substituído por um comando de longa execução. Existe alguma maneira de reescrever essa função para que ela retorne imediatamente?

    
por Codemunger 29.01.2016 / 15:30

1 resposta

1

A função sai, mas o conjunto de shell subiu um pipe da função para o código que lê stdout da função e depois coloca o resultado na variável pidthatwasreturned .

Este descritor de arquivo stdout , no entanto, é mantido aberto pelo comando sleep por 60 segundos.

Sua função redireciona a saída para o comando echo, mas não para o comando sleep e, por esse motivo, a atribuição da variável aguarda até que stdout do sleep seja fechado.

Se você trocar & e > /dev/null , ele funcionará no Bourne Shell e deverá funcionar em bash , a menos que haja um erro em bash .

    
por 29.01.2016 / 15:48