web-dev-qa-db-fra.com

Pourquoi n'ai-je pas de code de sortie de debootstrap?

Je teste debootstrap dans un chroot via un script bash.

L'extrait qui l'exécute est:

#!/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"

Cependant, après avoir exécuté le script, les dernières lignes imprimées sur le terminal sont:

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

Je ne vois pas l'échec o le message réussi.

Le journal debootstrap dans le chroot indique:

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

Il est donc clair que quelque chose a échoué.

Pourquoi ne puis-je pas attraper cela dans mon bloc de vérification d'erreur?

1
opticyclic

Si vous voulez simplement tester un code de sortie, bash a la syntaxe simple suivante:

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

La raison pour laquelle l'autre façon ne fonctionne pas est parce que set -e provoque la fermeture du script avant que le code de sortie soit testé.

Pour plus d'informations sur les valeurs de sortie et le recouvrement des erreurs, consultez les liens suivants:

1
dessert