Como posso obter o 'apt-get update' para refletir o status do erro em seu código de saída?

0

Ao executar sudo apt-get update -q , às vezes vejo coisas como

Err:23 http://ppa.launchpad.net/chris-lea/redis-server/ubuntu precise/main i386 Packages
  Could not connect to ppa.launchpad.net:80 (91.189.95.83), connection timed out
Err:24 http://ppa.launchpad.net/chris-lea/redis-server/ubuntu precise/main Translation-en
  Unable to connect to ppa.launchpad.net:http:

ou como

W: http://us-central1.gce.archive.ubuntu.com/ubuntu/dists/precise-updates/InRelease: Signature by key 630239CC130E1A7FD81A27B140976EAF437D05B5 uses weak digest algorithm (SHA1)

Mas echo $? me diz que apt-get update -q foi bem-sucedido. Como posso obter o status de erro / aviso como fatal e fazer com que apt-get update falhe com um código de saída diferente de zero?

    
por Jason Gross 16.01.2018 / 17:41

2 respostas

0

Você pode criar um script bash que verifique a saída do comando:

if { apt-get update 2>&1 || echo E: update failed; } > result.txt; cat result.txt | grep -q '^[(W)|(E]:'; then
    echo error
else (
        if  cat result.txt | grep -q '^[(Get)]:'; then
            echo repaired
        else 
            echo success
        fi
    )
fi

Aqui, verificamos se uma linha começa com E ( Err: ou E: , etc.) para erros ou com W para avisos. Ambos retornam o código de status error .

Se não houver erro e houver um Get: , significa que atualizamos nossos repositórios. Ele retorna o código de status reparado .

E, finalmente, se não encontramos nenhum desses, o script foi um sucesso .

    
por Quentin Pétel 24.04.2018 / 16:31
0

Como mencionado por @Terrance, esta questão é muito parecida com essa outra questão apt -get update exit status (no Unix e no Linux StackExchange).

FYI Acabei de postar outra solução que também pode ser combinada com o travis_retry Travis CI comando (que pode ser o caso de uso pretendido do OP):

exec {fd}>&2 # copy stderr to some unused fd
travis_retry bash -o pipefail -c "sudo apt-get update -y -q 2>&1 | tee /dev/fd/$fd | ( ! grep -q -e '^Err:' -e '^E:' )"
exec {fd}>&- # close file descriptor
    
por ErikMD 13.08.2018 / 14:53