找出最新版本的库并删除lib名称

时间:2017-07-28 22:28:40

标签: awk

我正在使用tsch创建一个脚本,用于更新给定文件夹中库的链接。

我可以使用(例如)

获取库的最新版本
ldconfig -v | grep libelf

给了我

libelf.so.1 -> libelf-0.158.so
libelf.so.0 -> libelf.so.0.8.13
libelf.so.1 -> libelf-0.158.so

但我不知道如何剥离结果的libelf-0.158.so部分。我试着用akw

set lib = `ldconfig -v | grep libelf | awk '$1 == "-> " {gsub(/\/.*$/, "", $2); print $2}'`

但没有得到任何结果

我还想把它插入到一个循环中,它会搜索给定文件夹中的所有库链接,因为我事先不知道该文件夹有哪些库链接,我不想写每个链接可能性,如

if ( -f libelf.so.1 ) ln -fs /usr/lib64/libelf-0.158.so libelf.so.1
if ( -f libreadline.so.1 ) ln -fs /lib64/libreadline.so.6.3 libreadline.so.1
if ( -f libXv.so.1 ) ln -fs /usr/lib64/libXv.so.1.0.0 libXv.so.1

2 个答案:

答案 0 :(得分:2)

根据您发布的内容,您需要的是:

ldconfig -v | awk '/libelf/{print $3}'

请注意,当你已经使用awk时,你永远不需要grep(或sed),因为awk可以做一切有用的事情。

答案 1 :(得分:0)

问题的第二部分没有答案。你可以使用这样的东西:

# ldconfig -p |  awk -v dir="." '/libelf/{ \
                    printf("if (-f %s/%s) ln -fs %s %s/%s\n",\
                           dir, $1, $4, dir, $1 \
                    )}'

结果如下:

if (-f ./libelf.so.1) ln -fs /lib64/libelf.so.1 ./libelf.so.1
if (-f ./libelf.so.1) ln -fs /lib/libelf.so.1 ./libelf.so.1

一些评论:

  • 您可以将awk命令传递给uniq,但由于您使用的是ln -f,因此没有问题。
  • 使用-v dir=,您可以设置要在其中创建链接的目录。
  • 我建议使用ldconfig -p,因为-v可能会显示一些错误,您需要在awk脚本中过滤掉这些错误。