インストールしている Debian パッケージのテストスクリプトを作成したいと思います。
一致するパッケージがない場合をdpkg-query
使用して検索すると、エラーが返されます。しかし、これを具体的に検出し、他のエラー(リソースの消耗など)が発生した場合、中断したい場合はどうすればよいかわかりません。
ベストアンサー1
dpkg-query
実際にこれを行うオプションがあり、その終了コードはユースケースをサポートしています。
-s
、--status
package-name...
指定されたパッケージの状態を報告します。インストールされたパッケージのステータスデータベースにあるエントリのみが表示されます。複数の項目がリストされている場合、
package-name
要求された状況項目はパラメーター・リストで指定された順序と同じ順序で空行に分割されます。
(参考までに次のようになります。インストール済みパッケージ状態データベースがインストールされていない項目を報告できないようにします。これはユーザーが求めているものです。
終了ステータス
0:要求されたクエリが正常に実行されました。
1:ファイルやパッケージが見つからないため、要求されたクエリは完全にまたは部分的に失敗しました(例外
--control-path
、--control-list
これらの--control-show
エラーは致命的です)。2:誤ったコマンドラインの使用やシステムとのやり取り(データベースアクセス、メモリ割り当てなど)によって発生した致命的または回復不能なエラー。
(Debian 8に含まれているマンページにはこれについて言及していませんが、dpkg-query
実際にはDebian 8でもこの動作が発生します。)
そのように
#!/bin/sh
dpkg-query -s package > /dev/null 2>&1
case $? in
0)
echo $1 is installed
;;
1)
echo $1 is not installed
;;
2)
echo An error occurred
;;
esac
(関数になるもの)は私が理解したものと一致します。