Acho que a leitura de count
em uma substituição de processo impede que você obtenha seu status de retorno. Então não faça isso. Em vez disso, armazene o resultado em uma variável ou use um pipe.
count=$(count)
if [ $? -eq 0 ]; then
read -r R Q <<<"$count"
…
ou
set -o pipefail
if count | { read -r R Q; … }
Outra possibilidade é usar a variável PIPESTATUS
para verificar o status de retorno do primeiro comando.
count=$(qstat -tn1 | awk …)
if ((${PIPESTATUS[0]} == 0)); then
read P Q
…
Como alternativa, providencie para que o awk imprima algo diferente (por exemplo, nada) quando sua entrada estiver vazia.
awk '
BEGIN { R = 0; Q = 0; }
$10 == "R" { R++ }
$10 == "Q" { Q++ }
END { if (NR) print R, Q }'
Você pode testar se a entrada de um comando está vazia com ifne
de moreutils ou outros métodos . Mas já que você está entrando no awk, é melhor fazê-lo dentro do script awk que você já tem.
Se você precisar obter o status de retorno do comando qstat
, poderá alimentá-lo para o awk como uma linha de entrada extra. Para facilitar a análise, organize a última linha para ter um formato exclusivo.
{
qstat -tn1
echo exit_code = $?
} | awk '
…
/^exit_code = / { status = $3 }
END { if (status == 0) print Q, R }
'