老师布置的一个题目。脚本可同时接受多个需要拷贝的命令作为参数。
#!/bin/bash PATH=${PATH:=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin} # TARGET=/mnt/sysroot # function cpfile () { [ -f "${TARGET}$1" ] && echo "${TARGET}$1 already exist !" && return 1 SRCDIR="${1%/*}" DISDIR="${TARGET}$SRCDIR" [ -d "$DISDIR" ] || mkdir -p "$DISDIR" cp -Lp "$1" "$TARGET$1" #在$TARGET后添加$1是为了确保原文件是个链接文件时,跟踪链接文件并拷贝后名称和原文件相同 } # for i do type $i | grep "builtin" > /dev/null && ($i is builtin command; continue) #检查命令是否为shell内置 FILE=$(which $i | grep -v "^alias" | grep -o "[^[:space:]]*") cpfile $FILE RETVAL=$? [[ $RETVAL == 1 ]] && continue #如果命令已经存在,如果已经复制过了.则其依赖的库文件就不用再复制了 for LIB in $(ldd "$FILE" | grep -o "[^[:space:]]*/lib[^[:space:]]*") do cpfile "$LIB" done done