私は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...
失敗したor成功したメッセージが表示されません。
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
したがって、明らかに何かが失敗しました。
エラーチェックブロックでこれをキャッチできないのはなぜですか?
終了コードをテストするだけの場合、bash
の構文は次のとおりです。
if debootstrap --verbose --Arch=${Arch} ${RELEASE} ${chroot_dir}
then
echo Success
else
echo Failure
fi
他の方法が機能しない理由は、set -e
はスクリプトを終了させますbefore終了コードがテストされます。
終了値とエラートラップの詳細については、次のリンクを参照してください。