Por que não tenho código de saída do debootstrap?

1

Estou testando o debootstrap em um chroot por meio de um script bash.

O snippet que o executa é:

#!/usr/bin/env bash
set -e
...
...
sudo debootstrap --verbose --arch=${ARCH} ${RELEASE} ${chroot_dir}
if [ "$?" -ne "0" ]; then
  echo "debootstrap failed."
  echo "See ${chroot_dir}/debootstrap/debootstrap.log for more information."
  exit 1
fi

echo "debootstrap succeeded"

No entanto, depois de executar o script, as últimas linhas impressas no terminal são:

I: Chosen extractor for .deb packages: dpkg-deb
I: Extracting adduser...

Não vejo a mensagem ou falhada com êxito.

O log do debootstrap no chroot diz:

tar: ./usr/sbin/addgroup: Cannot create symlink to 'adduser': File exists
tar: ./usr/sbin/delgroup: Cannot create symlink to 'deluser': File exists
tar: Exiting with failure status due to previous errors

Então, claramente, algo falhou.

Por que não consigo detectar isso no bloco de verificação de erros?

    
por opticyclic 03.05.2018 / 19:04

1 resposta

1

Se você quiser apenas testar um código de saída, bash tem a seguinte sintaxe simples:

if debootstrap --verbose --arch=${ARCH} ${RELEASE} ${chroot_dir}
then
  echo Success
else
  echo Failure
fi

A razão pela qual a outra maneira não funciona é porque set -e faz com que o script saia antes do código de saída ser testado.

Para mais informações sobre valores de saída e interceptação de erros, consulte os links a seguir:

por dessert 03.05.2018 / 22:35