リストからインストールされていないパッケージがいくつあるかを確認したいと思います。私はArchlinuxを使用しているので、pacman -Qを使用してパッケージがインストールされていることを確認します。インストールされていない場合は、「エラー: 'パッケージ名'パッケージが見つかりません。」などのメッセージが返されます。
次のように使用できると思いますgrep -c 'error'
。
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error'
しかし、私には次のように返されます。
エラー: 'bison'パッケージが見つかりません。
エラー: 'pkg-config'パッケージが見つかりません。
0
0を返しますが、2を返したいです。 awkを使用しても機能しません。
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | awk '/error: / {count++} END {print count}'
私にとって、これは次を返します。
エラー: 'bison'パッケージが見つかりません。
エラー: 'pkg-config'パッケージが見つかりません。
だから私の考えでは、変数がcount
印刷されないので値さえ持っていないようです。私も試してみましたが、うまくいかずにwc -l
0を返します。
削除されたパッケージの数を印刷する正しい方法は何ですか?
編集:これを行ったときに、次のことが見つかりました。
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config > tempfile
cat tempfile
エラーメッセージを含む2行は追加されませんtempfile
(残りのコマンド出力は追加されます)。これが問題を解決するのに役立つと思いました。
答え1
問題は、エラーメッセージSTDOUT
がに送信されないことですSTDERR
。STDERR
また、次のように明示的にリダイレクトする必要があります。
pacman -Q bison patch pkg-config 2>&1 | grep -c 'error'
bashやzshなどがある場合は、|&
自動リダイレクトSTDOUT
も使用できますSTDERR
。
pacman -Q bison patch pkg-config |& grep -c 'error'
答え2
エラーはに印刷されますstderr
。stdout
あなたのパイプ()は出力のみを見ることができます|
。パイプの正面にstdout
リダイレクトすると、すべての出力は次のように進みます。stderr
stdout
grep
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config 2>&1 | grep -c 'error'
答え3
wc -l
これを使用して出力ライン数を計算できます。
したがって、pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error'
出力は次のようになります。
error: package 'bison' was not found
error: package 'pkg-config' was not found
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error' | wc -l
grepが1行を出力する回数を計算するために実行できます。