Pou*_*uya 6 dpkg scripts output
我正在编写一个脚本来检查非常大的依赖项列表。所以我写了一个函数来获取包名作为输入并使用dpkg检查它是否安装并打印适当的输出。这是此功能的一个版本:
check_dependency() {
dpkg -l $1 > /dev/null
if [ $? -eq 0 ]; then
# print something saying it is installed
else
# print something saying it was not found
fi
}
Run Code Online (Sandbox Code Playgroud)
安装包时工作正常。但是当它没有安装时,它以某种方式不会将输出重定向到/dev/null并提示:
dpkg-query: no packages found matching foo-bar
Run Code Online (Sandbox Code Playgroud)
在第二次尝试中,我修改了函数体以将其用于grep -q:
check_dependency() {
dpkg -s $1 | grep -q 'installed'
if [ $? -eq 0 ]; then
# print something saying it is installed
else
# print something saying it was not found
fi
}
Run Code Online (Sandbox Code Playgroud)
安装软件包后,它似乎再次正常工作,但是,当找不到软件包并且dpkg终端上出现不需要的消息时:
dpkg-query: package 'foo-bar' is not installed and no information is available bla bla...
Run Code Online (Sandbox Code Playgroud)
直接使用会dpkg-query导致类似的问题。找不到包时如何让它静音?
您希望将标准输出 (stdout) 和标准错误 (stderr) 重定向到/dev/null. 为此,请替换>为&>. 这是特定于 的快捷方式bash。所以你的代码将是:
check_dependency() {
dpkg -l $1 &> /dev/null
if [ $? -eq 0 ]; then
# print something saying it is installed
else
# print something saying it was not found
fi
}
Run Code Online (Sandbox Code Playgroud)
但是,如果软件包已被删除但配置文件仍然存在(正如@AB 所指出的),这仍然会将其视为已安装。相反,你可以尝试
check_dependency() {
# Get the number of packages installed that match $1
num=$(dpkg -l "$1" 2>/dev/null | egrep '^ii' | wc -l)
if [ $num -eq 1 ]; then
# print something saying it is installed
elif [ $num -gt 1]; then
# print something saying there is more than one package matching $1
else
# print something saying it was not found
fi
}
Run Code Online (Sandbox Code Playgroud)
使用dpkg -l $1和检查返回代码并不能说明软件包的安装状态。
使用awk和dpkg -l检查状态ii
dpkg -l | awk '/^ii +'"$1"' +/'
Run Code Online (Sandbox Code Playgroud)
例子
$ package="mc"
$ dpkg -l | awk '/^ii +'"$package" +' /'
ii mc 3:4.8.13-3 i386 Midnight Commander - a powerful file manager
$ package="foobar"
$dpkg -l | awk '/^ii +'"$package" +' /'
<returns nothing>
Run Code Online (Sandbox Code Playgroud)
或者
$ package="mc"
$ dpkg -l | awk '/^ii +'"$package"' +/ {print $2}'
mc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3715 次 |
| 最近记录: |