私は、パッケージが解凍される前にスクリプトが実行するpreinstファイルの内容を研究しています。デビアンアーカイブ (.deb) ファイル。
スクリプトには次のコードがあります。
#!/bin/bash
set -e
# Automatically added by dh_installinit
if [ "$1" = install ]; then
if [ -d /usr/share/MyApplicationName ]; then
echo "MyApplicationName is just installed"
return 1
fi
rm -Rf $HOME/.config/nautilus-actions/nautilus-actions.conf
rm -Rf $HOME/.local/share/file-manager/actions/*
fi
# End automatically added section
私の最初の質問は次の行についてです:
set -e
スクリプトの残りの部分は非常にシンプルだと思います。Debian/ウブントゥパッケージ マネージャーがインストール操作を実行しています。実行されている場合は、アプリケーションがシステムにインストールされたかどうかを確認します。インストールされている場合は、スクリプトは「MyApplicationName がインストールされました」というメッセージを出力して終了します (return 1
つまり、「エラー」で終了するということですね)。
ユーザーが Debian/Ubuntu パッケージ システムにパッケージのインストールを要求している場合、スクリプトは 2 つのディレクトリも削除します。
これは正しいでしょうか、それとも何か見落としているのでしょうか?
ベストアンサー1
からとhelp set
Bash リファレンス ドキュメント: Set 組み込み関数:
-e Exit immediately if a command exits with a non-zero status.
しかし、一部の人はこれを悪い習慣だと考えています(Bash FAQとIRCC の フリーノード#bash FAQ 作成者)。以下を使用することをお勧めします。
trap 'do_something' ERR
エラーが発生したときに関数を実行しますdo_something
。
見るset -e (または set -o errexit、または trap ERR) が期待どおりに動作しないのはなぜですか?