您的位置:首页 > 运维架构 > Linux

小linux 移植命令的功能 单独脚本

2011-05-16 07:57 274 查看
之前说的从0构建linux,有种情况,当我们做好小linux后在使用过程中发现你需要用到的一个命令没有怎么办,还记得有个移植命令的功能函数吧,我们可以单独拿出来,想事后加命令直接调用就好,将其拿出来后如下:
具体每一行不用详细解释,在上一篇中有解释可以参考
#!/bin/bash
#

TARGET='/mnt/sysroot'

BINCP() {
TMPFILE=`mktemp -t bincp.XXXX`
FULLBIN=`which $1 2>/dev/null | grep -v "alias" | sed 's@[[:space:]]/{1,/}/(.*/)@/1@g'`

if [ -z $FULLBIN ];then
echo "Incorrect file name or file not exist..."
return 2
fi

BINPATH=`echo $FULLBIN | sed "s@/(.*/)/${1}@/1@g"`
[ -d $TARGET/$BINPATH ] || mkdir -p $TARGET/$BINPATH &> /dev/null
[ $? -eq 0 ] && cp -f $FULLBIN ${TARGET}/$BINPATH && echo -e "Copying /033[1;31m${1}/033[0m to the target.../n/tCopy the /033[1m$FULLBIN/033[0m done."

# copy the library files
LDLINUX=`ls /lib | grep ld-linux`
cp /lib/$LDLINUX $TARGET/lib

ldd $FULLBIN | grep -E -v "linux-gate|ld-linux" | cut -d'>' -f2 | cut -d' ' -f2 > $TMPFILE
while read LINE; do
LIBFILE=`basename $LINE`
LIBPATH=`echo $LINE | sed "s@/(.*/)/$LIBFILE@/1@g"`
if [ ! -e $TARGET/$LIBPATH/$LIBFILE ]; then
[ -d $TARGET/$LIBPATH ] || mkdir -p $TARGET/$LIBPATH &> /dev/null
cp $LINE $TARGET/$LIBPATH
[ $? -eq 0 ] && echo -e "/tCopy the /033[1m$LINE/033[0m done."
fi
done < $TMPFILE
rm -f $TMPFILE
}

for I in init bash mount hostname ifconfig ls cat touch mkdir; do
BINCP $I
done

echo -e "/nCopy other commands or deamons to target, /033[31;1mQUIT/033[0m for quiting./n"
read -p "The name of binary file will be copyed: " BINARY
[[ -n $BINARY ]] && BINARY=`basename $BINARY` 2> /dev/null

while [[ $BINARY != 'QUIT' ]] && [ -n $BINARY ]; do
BINCP $BINARY
RETVAL=$?
echo -n -e "/nContinue, type /033[31;1mQUIT/033[0m for quiting: "
read BINARY
[[ -n $BINARY ]] && BINARY=`basename $BINARY` 2> /dev/null
[ $RETVAL -eq 2 ] && continue
sync
done

sync
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: