2011年11月8日火曜日

debianでpackageがインストール済みか判定する方法

インストール済みか否かは dpkg -l の戻り値で判定をすればokかと思っていたら違った。 落とし穴があった。 インストールしてたものを削除した場合、configなどが残っていたら 戻り値が 0 になる (--purge付けないでの削除)。 正確に判定するには、dpkg -l 出力結果の 頭に付いているフラグを確認するのが正しそう。 例えば、不要な nano を消してとしても、
$ dpkg -l nano ; echo $?
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version                           Description
+++-=================================-=================================-==================================================================================
un  nano                                                          (no description available)
0
となる。 先頭のフラグの意味は、dpkg -l の出力に書いてあるのも気付かなかった(意識して見てなかった)。 先頭が i ならインストール済みなので判定は、
$ dpkg -l nano | grep -E "^i.+[ \t]+nano"; echo $?
1
とするのが良さそうである。

0 件のコメント:

コメントを投稿