jdo*_*dog 5 ubuntu redhat rpm dpkg
已经为Redhat编写了一个安装脚本(适用于Microsoft®SQLServer®ODBCDriver 1.0 for Linux)
它使用此代码检查是否安装了某些软件包
req_libs=( glibc e2fsprogs krb5-libs openssl )
for lib in ${req_libs[@]}
do
local present=$(rpm -q -a $lib) >> $log_file 2>&1
if [ "$present" == "" ]; then
log "The $lib library was not found installed in the RPM database."
log "See README for which libraries are required for the $driver_name."
return 1;
fi
done
Run Code Online (Sandbox Code Playgroud)
我已经通过了解/信任库已安装并简单地删除测试来克服了这个问题,但我现在想整理一下.
在Ubuntu/Debian中,通常库包装前缀为"lib"而不是后缀.开发包通常以"-dev"为后缀,而不是"-devel"
如果您不确定命名等效包的内容,可以始终执行以下操作:
sudo apt-get update
apt-cache search <packagename>
Run Code Online (Sandbox Code Playgroud)
...并且在搜索中不包含"lib"或"dev"部分,您将获得不错的结果.从那里,您可以手动确定您正在寻找的正确包装.
你可以使用"dpkg -s"它会起作用,虽然根据我对"rpm -qa"输出的理解,你可能想要一些不那么冗长的东西.管道输入"grep"的"dpkg-query -l"将在一行输出包信息,并且应该更容易阅读.
以下是脚本的等效部分(具有正确的包名称和单独行上的log_file输出以正常工作):
#!/bin/bash
function stack_install()
{
log_file="$HOME/Desktop/stackoverflow/stack-log.txt"
req_libs=( libc6 e2fsprogs libkrb5-3 openssl )
for lib in ${req_libs[@]}
do
local present=$(dpkg-query -l "$lib" | grep "$lib" 2>/dev/null)
echo "$present" >> "$log_file"
if [ "$present" == "" ]; then
echo "The $lib library was not found installed in the dpkg database."
echo "See README for which libraries are required for the $driver_name."
return 1;
fi
done
}
stack_install
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |