〖Linux〗简单的将Shell和一些文件打包成一个单独的“可执行文件”
生活随笔
收集整理的這篇文章主要介紹了
〖Linux〗简单的将Shell和一些文件打包成一个单独的“可执行文件”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有時候給別人分享一個工具的時候,同時需要提供的文件比較多;
如果分享一個壓縮包還得教會對方如何解壓、執行哪個腳本,感覺需要傳輸的內容多了就不方便;
?
把幾個Shell腳本和文件打包成一個“單獨的可執行文件”,對方接收到這個文件,只需要執行一下這個文件,就可以實現解壓、執行對應腳本了,相對比較方便;
?
#!/bin/bash - #=============================================================================== # # FILE: shell_pack.sh # # USAGE: ./shell_pack.sh # # DESCRIPTION: # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: lwq (28120), scue@vip.qq.com # ORGANIZATION: # CREATED: 04/22/2015 02:38:01 PM CST # REVISION: --- #===============================================================================#=== FUNCTION ================================================================ # NAME: usage # DESCRIPTION: Display usage information. #=============================================================================== function usage () {cat <<- EOTUsage : $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 packageOther The all files what you want to packEOT } # ---------- end of function usage ----------#----------------------------------------------------------------------- # Handle command line arguments #-----------------------------------------------------------------------while getopts ":hp:s:" opt docase $opt inh|help ) usage; exit 0 ;;p|package ) package_name=$OPTARG ;;s|script ) install_script=$OPTARG ;;\? ) echo -e "\n Option does not exist : $OPTARG\n"usage; exit 1 ;;esac # --- end of case --- done shift $(($OPTIND-1))if [[ -z $package_name ]]; thenecho "package_name can't not be empty"usageexit fiif [[ -z $package_name ]]; thenecho "install_script can't not be empty"usageexit fifiles=$@generate_wrapper_script(){local install_script=$1local wrapper_script=$2cat <<-'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 ]; thenecho "unpack package failed."exit 1 fi echo "" echo "installing ..." cd $unpackdir EOTcat <<-EOR >>$wrapper_script chmod +x $install_script ./$install_script EORcat <<-'EOE' >>$wrapper_script if [ $? -ne 0 ]; thenecho "install failed."exit 2 elif [[ -d $unpackdir ]]; thenrm -rf $unpackdir fi echo "install ok, enjoy!" exit 0 #__SCRIPTEND__ EOE }tarfile=package_content_$$.tgz wrapfile=wrap_$$.shecho -e "start packing ..\n" tar zcvf $tarfile $files $install_script generate_wrapper_script $install_script $wrapfile cat $wrapfile $tarfile > $package_name chmod +x $package_nameecho -e "\noutput: $package_name\n"rm -f $tarfile rm -f $wrapfile?
文件內容保存到 shell_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?
轉載于:https://www.cnblogs.com/scue/p/4447911.html
總結
以上是生活随笔為你收集整理的〖Linux〗简单的将Shell和一些文件打包成一个单独的“可执行文件”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Firefox 检测到该服务器正在将此地
- 下一篇: -webkit-min-device-p