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?
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: