Я тестирую debootstrap в chroot через скрипт bash.
Фрагмент, который его запускает:
#!/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"
Однако после запуска скрипта последние строки, напечатанные на терминале:
I: Chosen extractor for .deb packages: dpkg-deb
I: Extracting adduser...
Я не вижу сбой или полученное сообщение.
Журнал debootstrap в chroot говорит:
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
Так что явно что-то не получилось.
Почему я не могу перехватить это в моем блоке проверки ошибок?
Если Вы просто хотите протестировать на код выхода, bash
имеет следующий простой синтаксис:
if debootstrap --verbose --arch=${ARCH} ${RELEASE} ${chroot_dir}
then
echo Success
else
echo Failure
fi
Причина, почему другой путь не работает, состоит в том потому что set -e
заставляет сценарий выходить, прежде чем код выхода будет протестирован.
Поскольку дополнительные материалы для чтения о значениях выхода и обнаружении ошибок видят следующие ссылки: