用途
有时候,不知道什么原因,lib里面的各种so文件的链接会失效,导致依赖这些库的各种操作都会error,所以,需要能恢复链接。
代码
- 读取当前目录下的文件,找到lib.*[0-9]$的文件,即lib开头,数字结尾的文件,认为这是链接文件。
- 根据链接文件名,找到so文件。
- 执行ln命令
#!/bin/bash
for file in $PWD/*; do
if [ -f $file ]
then
filename=$(basename $file)
linkfile=$(ls $filename | grep lib.*[0-9]$)
if [ "$linkfile" != "" ]
then
sofilehead=${linkfile%%.*}
#echo $sofilehead
for file2 in $PWD/*; do
if [ -f $file2 ]
then
filename2=$(basename $file2)
sofile=$(ls $filename2 | grep ${sofilehead}-.*so$)
if [ "$sofile" != "" ]
then
#echo $sofile
echo "ln -s -f $sofile $linkfile"
ln -s -f $sofile $linkfile
fi
fi
done
fi
fi
done
感想
- shell绝对是程序员的真爱。
- 第一次写的感受:特别注意空格,各种细节,都会导致出不了预想的结果。
- 我爱shell脚本。
改进
- 链接文件和源文件的关系,如果仅仅从名字上来寻找,这样的方法,鲁棒性太差了。,
- 要从cat的输出找到源文件。下次再遇到这个问题,从这里改进。