使用 bash 列出库的所有版本

使用 bash 列出库的所有版本

我编写了这个脚本来获取我的 Ubuntu 系统上所有 libpcap 库的版本号。

#!/bin/bash

allLIBs=$(ldconfig -p | grep libpcap)
echo "$allLIBs" | while IFS= read -r a; do
    loc=$(echo $a | awk '{print $4}')

    # resolve if a sym link
    if [[ -h $loc ]]; then
        loc_res=$(readlink -f $loc)
    fi

    # get lib name
    libName=$(basename $loc_res)

    echo "$loc"
    echo "    resolved to: $loc_res"
    echo "    lib name: $libName"
done

该脚本在我的计算机上的输出是

/usr/local/lib/libpcap.so.1
    resolved to: /usr/local/lib/libpcap.so.1.8.0-PRE-GIT
    lib name: libpcap.so.1.8.0-PRE-GIT
/usr/lib/x86_64-linux-gnu/libpcap.so.0.8
    resolved to: /usr/lib/x86_64-linux-gnu/libpcap.so.1.5.3
    lib name: libpcap.so.1.5.3
/usr/local/lib/libpcap.so
    resolved to: /usr/local/lib/libpcap.so.1.8.0-PRE-GIT
    lib name: libpcap.so.1.8.0-PRE-GIT
/usr/lib/x86_64-linux-gnu/libpcap.so
    resolved to: /usr/lib/x86_64-linux-gnu/libpcap.so.1.5.3
    lib name: libpcap.so.1.5.3
  1. 我怎样才能得到so后面的数字?
  2. 这是获取我的机器上安装的所有 libpcap 库的版本号的正确方法吗?

答案1

如果您不确定安装的库的版本数量:

echo "$(ldconfig -p | grep -Eo '/[^ ]+libpcap[^ ]+$')" | \
        while IFS= read -r lib; do readlink "$lib"; done   

如果文件路径中没有任何空格,则使用以下内容就xargs足够了:

echo "$(ldconfig -p | grep -Eo '/[^ ]+libpcap[^ ]+$')" | xargs -L 1 readlink

如果只有一个版本:

readlink "$(ldconfig -p | grep -Eo '/[^ ]+libpcap[^ ]+$')"

要获取之后的版本号so.,请使用grep

% grep -Eo '[0-9][^[:alpha:]]+$' <<<'libpcap.so.1.5.3'
1.5.3

在这里我们得到版本的起始数字,然后继续直到最后,确保中间没有中间字母。

相关内容