〖 Linux 〗 Shell 과 일부 파일 을 하나의 단독 '실행 가능 한 파일' 로 간단하게 포장 합 니 다.

10780 단어 linux
때때로 다른 사람 에 게 도 구 를 공유 할 때 제공 해 야 할 파일 이 비교적 많다.
압축 패 키 지 를 공유 하려 면 상대방 에 게 어떤 스 크 립 트 를 풀 고 실행 하 는 지 가르쳐 야 한다. 전송 해 야 할 내용 이 많 으 면 불편 하 다.
 
Shell 스 크 립 트 와 파일 을 '단독 실행 가능 한 파일' 로 포장 합 니 다. 상대방 이 이 파일 을 받 았 습 니 다. 이 파일 을 실행 하기 만 하면 압축 을 풀 고 해당 스 크 립 트 를 실행 할 수 있 습 니 다. 상대 적 으로 편리 합 니 다.
 
#!/bin/bash - 
#===============================================================================
#
#          FILE: shell_pack.sh
# 
#         USAGE: ./shell_pack.sh 
# 
#   DESCRIPTION: 
# 
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: lwq (28120), [email protected]
#  ORGANIZATION: 
#       CREATED: 04/22/2015 02:38:01 PM CST
#      REVISION:  ---
#===============================================================================

#===  FUNCTION  ================================================================
#         NAME:  usage
#  DESCRIPTION:  Display usage information.
#===============================================================================
function usage ()
{
        cat <<- EOT

  Usage :  $0 -p package -s script file1 file2 file3 ..

  Options:
  -h|help       Display this message
  -p|package    The output package name
  -s|script     The script will run when unpack package
  Other         The all files what you want to pack

EOT
}    # ----------  end of function usage  ----------

#-----------------------------------------------------------------------
#  Handle command line arguments
#-----------------------------------------------------------------------

while getopts ":hp:s:" opt
do
  case $opt in

    h|help    ) usage; exit 0   ;;
    p|package ) package_name=$OPTARG ;;
    s|script  ) install_script=$OPTARG ;;
    \?        ) echo -e "
Option does not exist : $OPTARG
" usage; exit 1 ;; esac # --- end of case --- done shift $(($OPTIND-1)) if [[ -z $package_name ]]; then echo "package_name can't not be empty" usage exit fi if [[ -z $package_name ]]; then echo "install_script can't not be empty" usage exit fi files=$@ generate_wrapper_script(){ local install_script=$1 local wrapper_script=$2 cat <<-'EOT' >$wrapper_script #!/bin/sh echo "begin ..." unpackdir=/tmp/$(basename $0)_unpack rm -rf $unpackdir 2>/dev/null mkdir -p $unpackdir echo "unpacking ..." sed '1, /^#__SCRIPTEND__/d' $0 | tar zxf - -C $unpackdir if [ $? -ne 0 ]; then echo "unpack package failed." exit 1 fi echo "" echo "installing ..." cd $unpackdir EOT cat <<-EOR >>$wrapper_script chmod +x $install_script ./$install_script EOR cat <<-'EOE' >>$wrapper_script if [ $? -ne 0 ]; then echo "install failed." exit 2 elif [[ -d $unpackdir ]]; then rm -rf $unpackdir fi echo "install ok, enjoy!" exit 0 #__SCRIPTEND__ EOE } tarfile=package_content_$$.tgz wrapfile=wrap_$$.sh echo -e "start packing ..
" tar zcvf $tarfile $files $install_script generate_wrapper_script $install_script $wrapfile cat $wrapfile $tarfile > $package_name chmod +x $package_name echo -e "
output: $package_name
" rm -f $tarfile rm -f $wrapfile

 
파일 내용 을 셸 에 저장pack. sh, 사용 방법 예:
  ./shell_pack.sh -p logcat_install -s logcat_install.sh logcat_all.sh logcat_wrapper.sh vmstat2
실행 가능 한 파일 "logcat install"을 만 들 고 logcat 을 실행 합 니 다.install 시, 자신의 파일 에 있 는 tar. gz 파일 을 압축 해제 하고, 관건 적 인 스 크 립 트 logcat 를 실행 합 니 다.install.sh 

좋은 웹페이지 즐겨찾기