腳本,自動查找並拷貝庫

  開始試着修改initrd做miniLinux,需要向其中添加命令,慢慢完善。但是用ldd命令查看哪些大串的庫再拷貝實在是糾結~

自動實現一下:

描述:

  輸入命令後,自動尋找命令位置,將命令拷到對應根位置後,並且查詢到所需的庫文件,逐一的拷貝到定義好的位置。

    第二次修改給腳本添加了了參數,實現了可以在腳本中調用,並且直接傳 遞命令選項給腳本的功能;但是用戶使用的時候可以指定以交互式方式進行;
  缺陷:能夠實現的拷貝有侷限,由於對/lib、/usr/lib、 /usr/local/lib幾個位置區分比較麻煩,
現在腳本還進能實現拷貝/lib下的庫到對應威之下的功能;有時間了會不斷改進;
  1. #!/bin/bash
  2. #Author: Mo
  3. #Descripution: auto copy libs to specify site.
  4. #Date & Time: 2011-03-10-20:04:31
    #Version : 1.2.1
    #

    sysroot=/mnt/sysroot
    file=`mktemp /tmp/lddtmp.XXXX`

    mytrap() {
    rm -rf ${file}
    echo -e "\nQuit........\n "
    exit 1
    }
    trap "mytrap" SIGINT

  5. #read -p "Input your command: " comm
    while getopts ':s:u' SWITCH;do
    case $SWITCH in
    s) comm=$OPTARG
    echo "$OPTARG"
    ;;
    u) read -p "Input your command: " comm
    ;;
    \?) echo -e "Unknown option...\nUSAG: ./autolib.sh [-u]|[-s command]."
    exit 1
    ;;
    esac
    done

    if ! which $comm &>/dev/null ;then
    echo -e "\033[31mNo command:\033[0m ${comm}"
    exit 1
    else
    cpath=`which --skip-alias ${comm}`
    ldd ${cpath} | grep ".*[[:space:]]/.*[[:space:]]" | sed "s@.*[[:space:]]\(/.*[[:space:]]\)(.*)@\1@g" > ${file}

    #cp command
    cp -u ${cpath} ${sysroot}${cpath}
    sync

    #cp libs
    #NOTICE: this shell below can onlp copy libs from directory /lib , ro it may case problem;
    while read LINE ;do
    if [ -h $LINE ];then
    orglib=`ls -l $LINE | awk '{printf $11}'`
    /bin/cp -d $LINE "${sysroot}/lib"
    /bin/cp -d /lib/${orglib} "${sysroot}/lib"
    sync
    else
    /bin/cp -d $LINE "${sysroot}/lib"
    fi
    done < ${file}
    sync;sync

    echo -e "Path: " ${cpath} "\nAll have synced."
    fi

    #do some cleaning...
    rm -f ${file}

    wait
    echo "Copy has done."

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章