我正在通过 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
导致脚本退出前退出代码已经测试。
有关退出值和错误捕获的更多信息,请参见以下链接: