このシェルスクリプトがあります。
UNZIP_FOUND=$(dpkg-query -W --showformat='${Status}\n' unzip|grep "install ok installed")
if [ "" == "$UNZIP_FOUND" ]; then
echo unzip not found, I will install it
apt-get --assume-yes install unzip > /dev/null
fi
しかし、これは毎回次のような文を生成します。
dpkg-query: no packages found matching unzip
実際のインストール手順を実行する前に。
それを削除する方法はありますか?
ただ、dkpg-query コマンドの値を割り当てました。UNZIP_FOUND変数ですが、エコーしたくありません。
これを行うには、変数の割り当てを引用符で囲むことを読んで、次のように文字列をエスケープしてみました。
UNZIP_FOUND='$(dpkg-query -W --showformat=\'${Status}\n\' unzip|grep "install ok installed")'
しかし、うまくいきません。たぶん私の脱出が悪いかもしれません。
答え1
あなたは簡単にすることができます
apt-get --assume-yes install unzip
インストールされている場合は何も実行されません(古い場合以外はアップグレードされます)。
静かに保つには、--quiet
それらを追加するか、次にリダイレクトしてください/dev/null
。
apt-get -qq --assume-yes install unzip
(「非常に静かな」、この標識のマニュアルを-qq
参照してください)apt-get
パッケージが最初に存在するかどうかを本当に照会したい場合は、これを行うことができます。
if ! dpkg-query -W unzip >/dev/null 2>&1; then
apt-get --assume-yes install unzip
fi
dpkg-query
パッケージが見つからない場合は、ゼロ以外の終了状態で終了します。標準出力と標準エラーをにリダイレクトします。/dev/null
そこには興味深い内容が書かれていないからです。
端末にエラーメッセージが表示されるのは、dpkg-query
エラーが標準エラーストリームに書き込まれ、スクリプトが標準出力ストリームのみをキャプチャするためです。
答え2
dpkg-query -W --showformat='${Status}\n' unzip 2>/dev/null