• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-162  評論-223  文章-30  trackbacks-0
            腳本概述
               由于某些sdk或軟件依賴眾多的第三方庫,而從官網下載到windows主機或從linux傳到windows時,所依賴的so庫往往丟失符號鏈接,給編譯運行帶來不便,因此編寫了ctlsolink腳本,用于自動為單個so或某目錄下的眾多so或創建/刪除一級/二級符號鏈接。該腳本的用法如下:
               ● 第1參數為mk或rm子命令,mk表示創建,rm表示刪除
               ● 第2參數為文件或目錄
               
            ● 第3參數是可選的-r,且只能是-r,如果指定了,則表示不斷遞歸子目錄

            腳本實現
               考慮到so庫帶版本一般多為libx.so.1,libx.so.1.2,libx.so.1.2.3這三種形式(x為庫名),對于前一種創建/刪除一級符號鏈接即可,后兩種則創建/刪除二級符號鏈接。為了精確地抽出一級和二級鏈接名稱,這里使用awk來匹配,用shell變量的最短匹配模式從尾部逐步刪除點號及數字,核心代碼如下   
             1    if [ "$dir" != "$self_dir" ] || [ "$name" != "$self_name" ]; then
             2        if echo $name | aw'{if($0~/\.so\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}$/) exit 0; else exit 1}'; then
             3            link_name=${name%.[0-9]*}
             4            link_name=${link_name%.[0-9]*}
             5            link_name=${link_name%.[0-9]*}
             6            link_name2=${name%.[0-9]*}
             7            link_name2=${link_name2%.[0-9]*}
             8        elif echo $name | awk '{if($0~/\.so\.[0-9]{1,}\.[0-9]{1,}$/) exit 0; else exit 1}'; then
             9            link_name=${name%.[0-9]*}
            10            link_name=${link_name%.[0-9]*}
            11            link_name2=${name%.[0-9]*}
            12        elif echo $name | awk '{if($0~/\.so\.[0-9]{1,}$/) exit 0; else exit 1}'; then 
            13            link_name=${name%.[0-9]*}
            14        else
            15            return
            16        fi
            17
            18        if [ $do_mk = "yes" ]; then
            19            #echo "name=$name, link_name=$link_name, link_name2=$link_name2"
            20            if [ -"$link_name2" ]; then
            21                ln -sf $name $link_name2
            22                ln -sf $link_name2 $link_name
            23            else
            24                ln -sf $name $link_name
            25            fi
            26        else
            27            if [ -n $link_name2 ]; then
            28                rm -f $link_name2
            29            fi
            30            rm -f $link_name
            31        fi
            32    fi
               要注意的是,這兒不能使用%%刪除最長匹配的尾部來得到link_name,因為它的模式是.[0-9]*,這可能會錯誤地匹配了so前的部分,比如libx.1.so.2得到libx,而期望的是libx.1.so
               完整腳本下載:ctlsolink

            運行效果
               初始狀態
               
               運行ctlsolink創建軟鏈接后
               
               運行ctlsolink刪除軟鏈接后
                      
            posted on 2019-11-05 18:17 春秋十二月 閱讀(1997) 評論(0)  編輯 收藏 引用 所屬分類: System
            伊人久久大香线蕉av不变影院| 国内精品人妻无码久久久影院导航| 久久精品亚洲精品国产色婷| 久久久亚洲欧洲日产国码aⅴ| 潮喷大喷水系列无码久久精品| 久久久久国产精品麻豆AR影院 | 久久免费美女视频| 久久久噜噜噜久久| 99久久超碰中文字幕伊人| 国产精品久久久久久久久久影院 | 日本高清无卡码一区二区久久 | 亚洲精品国产综合久久一线| 97久久久精品综合88久久| 久久亚洲精品无码aⅴ大香| 日本福利片国产午夜久久| 亚洲中文久久精品无码ww16| 久久精品一区二区影院| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 91精品观看91久久久久久| 日日噜噜夜夜狠狠久久丁香五月| 久久免费视频6| 久久久综合香蕉尹人综合网| 999久久久免费国产精品播放| 999久久久无码国产精品| 久久久精品人妻一区二区三区蜜桃 | 国产亚洲精品自在久久| 婷婷综合久久中文字幕蜜桃三电影| 精品久久人人做人人爽综合| 四虎国产精品免费久久5151| 久久精品视频网| 成人精品一区二区久久久| 国产高潮久久免费观看| 久久精品国产亚洲精品| 亚洲国产成人久久精品99 | 模特私拍国产精品久久| 一级做a爰片久久毛片免费陪 | 久久综合给合久久狠狠狠97色| 亚洲精品无码专区久久久| 久久99精品久久久久久久不卡| 2022年国产精品久久久久| 国产成人香蕉久久久久|