#!/bin/bash
#
#********************************************************************
#encoding -*-utf8-*-
#Author: zhangshang
#Date: 2017-12-31
#URL: http://blog.vservices.top/myblog
#QQ Numbers: 765030447
#********************************************************************
#这个脚本是用来拷贝一个命令到一个新的目录下
#用来实现文件复制
function cp_file(){
local src_file=$1
local dst_path=$2
[ ! -e $dst_file ] && mkdir -pv $dir
\cp $1 $2/ #忽略提示,直接覆盖
}
#多重判断PATH下是否有指定命令
function test_cmd(){
local count=0
[ -z $1 ] && { echo "Please gave a argument !" ; return 1 ;}
for i in `echo $PATH | tr -s ':' '\n'`; do
local cmd=`find $i -maxdepth 1 -name $1 2>/dev/null`
[ -L "$cmd" ] && echo "$cmd is a symblink!" && continue
[ ${#cmd} -eq 0 ] && continue
echo $cmd
local count+=1
done
#判断是否是shell命令
if [ "$count" -eq 0 ];
then
local tmp=`type $1 2>/dev/null | egrep -i ".+shell.+" | wc -l`
if [ $tmp -eq 0 ]
then
echo -e "\033[31mNo this command: \"$1\"\033[0m" && return 1
else
echo -e "\033[31m\"$1\" is a shell command\033[0m" && return 1
fi
elif [ "$count" -gt 1 ];then echo -e "\033[31mThis command have more than 1: \"$1\"\033[0m" && return 1
fi
}
#取出命令的库文件,并复制
function cmd_so(){
local full_cmd=`which $1`
[ -d "$2/lib" ] || mkdir -pv $2/lib
for lib in `ldd $full_cmd |egrep -o "/[^[:space:]]+" ` ; do
cp_file $lib $2/lib
done
}
#读取当前文件夹下的cmd_list文件并逐个复制到指定目录;启用这个模式在执行shell时需要1个参数,$1为拷贝目的路径
function read_file(){
while read cmd_ready;do
test_cmd $cmd_ready
if [ $? -eq 0 ];then
local full_cmd=`which $cmd_ready`
cp_file $full_cmd $1
cmd_so $cmd_ready $1
fi
done <./cmd_list
}
#交互式每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到输入q退出;启用这个模式在执行shell时需要一个参数,$1为拷贝目的路径
function interact_cp(){
local short_cmd=''
while true; do
read -p "enter you cmd : " short_cmd
if [ "$short_cmd" == "q" ] ; then
break
fi
test_cmd $short_cmd
if [ $? -eq 0 ];then
local full_cmd=`which $short_cmd`
cp_file $full_cmd $1
cmd_so $short_cmd $1
fi
done
}
read_file $1
#interact_cp $1
文档更新时间: 2018-12-12 20:52 作者:张尚