我正在使用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
答案 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
一些评论:
uniq
,但由于您使用的是ln -f
,因此没有问题。-v dir=
,您可以设置要在其中创建链接的目录。ldconfig -p
,因为-v
可能会显示一些错误,您需要在awk脚本中过滤掉这些错误。