開始試着修改initrd作miniLinux,須要向其中添加命令,慢慢完善。可是用ldd命令查看哪些大串的庫再拷貝實在是糾結~shell
自動實現一下:bash
描述:ide
輸入命令後,自動尋找命令位置,將命令拷到對應根位置後,而且查詢到所需的庫文件,逐一的拷貝到定義好的位置。ui
第二次修改給腳本添加了了參數,實現了能夠在腳本中調用,而且直接傳 遞命令選項給腳本的功能;可是用戶使用的時候能夠指定以交互式方式進行;
缺陷:可以實現的拷貝有侷限,因爲對/lib、/usr/lib、 /usr/local/lib幾個位置區分比較麻煩,
如今腳本還進能實現拷貝/lib下的庫到對應威之下的功能;有時間了會不斷改進;
- #!/bin/bash
- #Author: Mo
- #Descripution: auto copy libs to specify site.
- #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- #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."