Почему у меня нет кода выхода из debootstrap?

Я тестирую 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

Так что явно что-то не получилось.

Почему я не могу перехватить это в моем блоке проверки ошибок?

1
задан 4 May 2018 в 21:34

1 ответ

Если Вы просто хотите протестировать на код выхода, bash имеет следующий простой синтаксис:

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

Причина, почему другой путь не работает, состоит в том потому что set -e заставляет сценарий выходить, прежде чем код выхода будет протестирован.

Поскольку дополнительные материалы для чтения о значениях выхода и обнаружении ошибок видят следующие ссылки:

1
ответ дан 7 December 2019 в 15:20

Другие вопросы по тегам:

Похожие вопросы: