Bash- Retorna um valor do processo filho para o pai

Bash- Retorna um valor do processo filho para o pai

Estou usando o código abaixo

record_count=0
task()
{
while read -r record ; do
record_count=$(( record_count + 1 ))
.....
done < $1
}

for i in {1..5}; do
task $i &
done

como posso usar o record_count do subshell\processo filho para o shell\processo pai. Eu tentei com return record_countmas não funciona. existe alguma outra maneira de retornar os valores (se possível, mais de um valor para retornar)

Responder1

"return" é para o código de saída, normalmente "0" indicando sucesso e qualquer outra coisa uma falha. E deve ser um número inteiro menor que 256, portanto geralmente não é útil para retornar o tipo de resultados esperados aqui.

Mas seus subprocessos podem produzir seus resultados como texto, e o processo principal pode, opcionalmente, capturar esses resultados:

record_count=0
task()
{
    while read -r record
    do
        record_count=$(( record_count + 1 ))
    done <$1
    echo $record_count
}

(
    for i in {1..5}
    do
        task $i &
    done
    wait
) \
| sort

A “espera” garante que todos os subprocessos foram concluídos antes de prosseguir.

Observe que com processos paralelos, não há garantia da ordem em que eles terminarão, portanto os resultados não aparecerão necessariamente na ordem 1, 2, 3, 4, 5.

Se essa ordem aleatória for um problema, o programa poderá passar uma "chave" para a tarefa e essa chave poderá ser usada para classificar a saída. Neste caso, $i em si poderia ser a chave, mas em geral os nomes dos arquivos não serão números inteiros simples.

Responder2

Você pode usar return record_counte obter o resultado correto somente se o número estiver entre 0 e 255. E você deve usar o código de retorno desta forma:

for i in {1..5}; do
task $i ; echo $?
done

informação relacionada