有时候给别人分享一个工具的时候,同时需要提供的文件比较多;

如果分享一个压缩包还得教会对方如何解压、执行哪个脚本,感觉需要传输的内容多了就不方便;

把几个Shell脚本和文件打包成一个“单独的可执行文件”,对方接收到这个文件,只需要执行一下这个文件,就可以实现解压、执行对应脚本了,相对比较方便;

#!/bin/bash -
#===============================================================================
#
# FILE: shell_pack.sh
#
# USAGE: ./shell_pack.sh
#
# DESCRIPTION:
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: lwq (), scue@vip.qq.com
# ORGANIZATION:
# CREATED: // :: PM CST
# REVISION: ---
#=============================================================================== #=== FUNCTION ================================================================
# NAME: usage
# DESCRIPTION: Display usage information.
#===============================================================================
function usage ()
{
cat <<- EOT Usage : $ -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 ;;
p|package ) package_name=$OPTARG ;;
s|script ) install_script=$OPTARG ;;
\? ) echo -e "\n Option does not exist : $OPTARG\n"
usage; exit ;; esac # --- end of case ---
done
shift $(($OPTIND-)) 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=$
local wrapper_script=$
cat <<-'EOT' >$wrapper_script
#!/bin/sh
echo "begin ..."
unpackdir=/tmp/$(basename $)_unpack
rm -rf $unpackdir >/dev/null
mkdir -p $unpackdir
echo "unpacking ..."
sed '1, /^#__SCRIPTEND__/d' $ | tar zxf - -C $unpackdir
if [ $? -ne ]; then
echo "unpack package failed."
exit
fi
echo ""
echo "installing ..."
cd $unpackdir
EOT
cat <<-EOR >>$wrapper_script
chmod +x $install_script
./$install_script
EOR
cat <<-'EOE' >>$wrapper_script
if [ $? -ne ]; then
echo "install failed."
exit
elif [[ -d $unpackdir ]]; then
rm -rf $unpackdir
fi
echo "install ok, enjoy!"
exit
#__SCRIPTEND__
EOE
} tarfile=package_content_$$.tgz
wrapfile=wrap_$$.sh echo -e "start packing ..\n"
tar zcvf $tarfile $files $install_script
generate_wrapper_script $install_script $wrapfile
cat $wrapfile $tarfile > $package_name
chmod +x $package_name echo -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

〖Linux〗简单的将Shell和一些文件打包成一个单独的“可执行文件”的更多相关文章

  1. Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤

    资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在 ...

  2. Linux定是调用shell脚本删除文件

    编写脚本 vi delbak.sh 代码如下: #!/bin/sh location="/home/mysql/backup/" find $location -mtime +7 ...

  3. 使用PyInstaller将Python程序打包成一个单独的exe文件

    1. 安装步骤略过 网上教程多 2. 用cmd进入PyInstaller的目录 然后执行以下命令: python pyinstaller.py -F C:\test.py 以上命令需要把Python目 ...

  4. linux在文件打包和压缩

    1. 打包和压缩文件 linux现在经常使用gzip和bzip2要压缩的文件.tar压缩文件. 经常使用的扩展: *.gz   gzip压缩文件 *.bz2  bzip2压缩的文件 *.tar   t ...

  5. Linux常用命令2--用户问题、文件的打包压缩

    Linux常用命令 如何进行用户和群组的创建和更改 [1]groupadd:用于创建新的群组. 语法:groupadd [-option] 用户名:其常用参数有:-g groupadd -g 555 ...

  6. 将exe和dll文件打包成单一的启动文件

    当我们用 VS 或其它编程工具生成了可执行exe要运行它必须要保证其目录下有一大堆dll库文件,看起来很不爽,用专业的安装程序生成软件又显得繁琐,下面这个方法教你如何快速把exe文件和dll文件打包成 ...

  7. Linux学习之十七-配置Linux简单的脚本文件自启动

    配置Linux简单的脚本文件自启动 在Linux中使用shell脚本解决一些问题会比单独执行多条命令要有效率,脚本文件规定命名以.sh结尾,最基本的规则就是其内容是命令,想要脚本文件开机自启动,就需要 ...

  8. Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间

    Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...

  9. Linux正则表达式、shell基础、文件查找及打包压缩

    Linux正则表达式.shell基础.文件查找及打包压缩 一.正则表达式 Linux正则表达式分为2类: 1.基本正则表达式(BRE) 2.扩展正则表达式(ERE) 两者的区别: 1.使用扩展正则表达 ...

随机推荐

  1. [Web 前端] 前端频道之团队维护、聚合、订阅

    cp from :https://blog.csdn.net/ivan820819/article/details/78885404 国内 腾讯 ISUX 腾讯全端 AlloyTeam 奇舞周刊 阿里 ...

  2. 【转】各种 NoSQL 的比较

    转自 : http://linux.cn/article-2177-1.html 来源:Linux中国  原文:http://linux.cn/article-2177-1.html     即使关系 ...

  3. jpa命名规则 jpa使用sql语句 @Query

    关键字方法命名sql where字句 AndfindByNameAndPwdwhere name= ? and pwd =? OrfindByNameOrSexwhere name= ? or sex ...

  4. 硬盘杀手!Windows版Redis疯狂占用C盘空间!

    关键词:Redis占用C盘,Windows Redis,64位Windows版Redis疯狂占用C盘空间,redis启动后创建RedisQFolk_****.dat文件.redis-server.ex ...

  5. 第二十七章 springboot + zipkin(brave-okhttp实现)

    本文截取自:http://blog.csdn.net/liaokailin/article/details/52077620 一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipki ...

  6. Go语言之进阶篇Socket编程

    一.Socket编程 1.什么是Socket Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭clo ...

  7. 超简单!80行代码实现Google日历(拖放、移动、AJAX)

    介绍 本实例介绍使用DayPilot Lite for ASP.NET MVC library 类来实现类google日历效果. 在线实例 天视图  星期视图  拖放调整  拖放移动  行代码来实现a ...

  8. 学 Win32 汇编[34] - 宏汇编(1)

    从接触 C 语言时, 我就不大喜欢宏; 但为了看懂别人的代码也不得不去了解. 宏可定义在源程序的任意位置, 但一般放在 .data 前面.有些简单的宏可以用 equ.textequ 或 = 来代替, ...

  9. JAVA-错误Several ports (8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.

    运行java程序的时候显示如下错误: 问题原因:导致这个错误的原因是因为已经启动了一个tomcat服务器 解决办法:到任务管理器中显示所有用户进程,将tomcat服务进程关闭,重新运行java程序就可 ...

  10. Altium Designer 基本封装

    1. 按键的绘制和封装怎么画?如下图: 回答:注意元件的画法不要看错了,封装采用Miscellaneous Devices.IntLib[Footprint View]中的DPST-4 2.蜂鸣器的绘 ...