1. #!/bin/bash
  2. #
  3. #********************************************************************
  4. #encoding -*-utf8-*-
  5. #Author: zhangshang
  6. #Date: 2017-12-31
  7. #URL: http://blog.vservices.top/myblog
  8. #QQ Numbers: 765030447
  9. #********************************************************************
  10. #这个脚本是用来拷贝一个命令到一个新的目录下
  11. #用来实现文件复制
  12. function cp_file(){
  13. local src_file=$1
  14. local dst_path=$2
  15. [ ! -e $dst_file ] && mkdir -pv $dir
  16. \cp $1 $2/ #忽略提示,直接覆盖
  17. }
  18. #多重判断PATH下是否有指定命令
  19. function test_cmd(){
  20. local count=0
  21. [ -z $1 ] && { echo "Please gave a argument !" ; return 1 ;}
  22. for i in `echo $PATH | tr -s ':' '\n'`; do
  23. local cmd=`find $i -maxdepth 1 -name $1 2>/dev/null`
  24. [ -L "$cmd" ] && echo "$cmd is a symblink!" && continue
  25. [ ${#cmd} -eq 0 ] && continue
  26. echo $cmd
  27. local count+=1
  28. done
  29. #判断是否是shell命令
  30. if [ "$count" -eq 0 ];
  31. then
  32. local tmp=`type $1 2>/dev/null | egrep -i ".+shell.+" | wc -l`
  33. if [ $tmp -eq 0 ]
  34. then
  35. echo -e "\033[31mNo this command: \"$1\"\033[0m" && return 1
  36. else
  37. echo -e "\033[31m\"$1\" is a shell command\033[0m" && return 1
  38. fi
  39. elif [ "$count" -gt 1 ];then echo -e "\033[31mThis command have more than 1: \"$1\"\033[0m" && return 1
  40. fi
  41. }
  42. #取出命令的库文件,并复制
  43. function cmd_so(){
  44. local full_cmd=`which $1`
  45. [ -d "$2/lib" ] || mkdir -pv $2/lib
  46. for lib in `ldd $full_cmd |egrep -o "/[^[:space:]]+" ` ; do
  47. cp_file $lib $2/lib
  48. done
  49. }
  50. #读取当前文件夹下的cmd_list文件并逐个复制到指定目录;启用这个模式在执行shell时需要1个参数,$1为拷贝目的路径
  51. function read_file(){
  52. while read cmd_ready;do
  53. test_cmd $cmd_ready
  54. if [ $? -eq 0 ];then
  55. local full_cmd=`which $cmd_ready`
  56. cp_file $full_cmd $1
  57. cmd_so $cmd_ready $1
  58. fi
  59. done <./cmd_list
  60. }
  61. #交互式每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到输入q退出;启用这个模式在执行shell时需要一个参数,$1为拷贝目的路径
  62. function interact_cp(){
  63. local short_cmd=''
  64. while true; do
  65. read -p "enter you cmd : " short_cmd
  66. if [ "$short_cmd" == "q" ] ; then
  67. break
  68. fi
  69. test_cmd $short_cmd
  70. if [ $? -eq 0 ];then
  71. local full_cmd=`which $short_cmd`
  72. cp_file $full_cmd $1
  73. cmd_so $short_cmd $1
  74. fi
  75. done
  76. }
  77. read_file $1
  78. #interact_cp $1
文档更新时间: 2018-12-12 20:52   作者:张尚