为什么我没有从 debootstrap 退出的代码?

为什么我没有从 debootstrap 退出的代码?

我正在通过 bash 脚本在 chroot 中测试 debootstrap。

运行它的代码片段是:

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

我没有看到失败或者成功的消息。

chroot 中的 debootstrap 日志显示:

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

如果您只想测试退出代码,则bash有以下简单的语法:

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

另一种方法不起作用的原因是set -e导致脚本退出退出代码已经测试。

有关退出值和错误捕获的更多信息,请参见以下链接:

相关内容