〖Linux〗简单的将Shell和一些文件打包成一个单独的“可执行文件”
有时候给别人分享一个工具的时候,同时需要提供的文件比较多;
如果分享一个压缩包还得教会对方如何解压、执行哪个脚本,感觉需要传输的内容多了就不方便;
把几个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和一些文件打包成一个单独的“可执行文件”的更多相关文章
- Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤
资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在 ...
- Linux定是调用shell脚本删除文件
编写脚本 vi delbak.sh 代码如下: #!/bin/sh location="/home/mysql/backup/" find $location -mtime +7 ...
- 使用PyInstaller将Python程序打包成一个单独的exe文件
1. 安装步骤略过 网上教程多 2. 用cmd进入PyInstaller的目录 然后执行以下命令: python pyinstaller.py -F C:\test.py 以上命令需要把Python目 ...
- linux在文件打包和压缩
1. 打包和压缩文件 linux现在经常使用gzip和bzip2要压缩的文件.tar压缩文件. 经常使用的扩展: *.gz gzip压缩文件 *.bz2 bzip2压缩的文件 *.tar t ...
- Linux常用命令2--用户问题、文件的打包压缩
Linux常用命令 如何进行用户和群组的创建和更改 [1]groupadd:用于创建新的群组. 语法:groupadd [-option] 用户名:其常用参数有:-g groupadd -g 555 ...
- 将exe和dll文件打包成单一的启动文件
当我们用 VS 或其它编程工具生成了可执行exe要运行它必须要保证其目录下有一大堆dll库文件,看起来很不爽,用专业的安装程序生成软件又显得繁琐,下面这个方法教你如何快速把exe文件和dll文件打包成 ...
- Linux学习之十七-配置Linux简单的脚本文件自启动
配置Linux简单的脚本文件自启动 在Linux中使用shell脚本解决一些问题会比单独执行多条命令要有效率,脚本文件规定命名以.sh结尾,最基本的规则就是其内容是命令,想要脚本文件开机自启动,就需要 ...
- Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间
Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...
- Linux正则表达式、shell基础、文件查找及打包压缩
Linux正则表达式.shell基础.文件查找及打包压缩 一.正则表达式 Linux正则表达式分为2类: 1.基本正则表达式(BRE) 2.扩展正则表达式(ERE) 两者的区别: 1.使用扩展正则表达 ...
随机推荐
- FrameLayout和handle实现霓虹灯效果
这个程序的主要思想就是在一个FrameLayout中定义多个TextView,分别设置不同的背景色.因为帧布局的特性,所以这些控件都是叠加起来的.然后,通过定时器循环给handler发送消息,改变控件 ...
- mac或者linux磁力下载方法:远离渣雷
wget是linux下常用的命令行下载工具,是Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件. t-get是一个简单的命令行BT下载工具,可以用于BT种子和磁力链接的下载 tg ...
- 请求被中止: 未能创建 SSL/TLS 安全通道,设置 TLSv1.2和TLSv1.1版本 .基础链接已经关闭,发送时发生错误
WSO2 API访问的安全要求, 只能提供TLSv1.2和TLSv1.1版本,其它SSL版本协议因为存在较高安全漏洞问题会被disable. A 改成TLSv1.1或TLSv1.2,最好使用TLSv1 ...
- Spring配置中的"classpath:"与"classpath*:"的区别研究
概念解释及使用场景: classpath是指WEB-INF文件夹下的classes目录. 通常我们一般使用这种写法实在web.xml中,比如spring加载bean的上下文时,如下: <!--系 ...
- go语言之进阶篇定时器停止
1.定时器停止 示例: package main import ( "fmt" "time" ) func main() { timer := time.New ...
- 创建SQL作业错误的解决方法(不能将值 NULL 插入列 'owner_sid',表 'msdb.dbo.sysjobs';列不允许有空值。)
在用SQL语句创建SQL Server作业时有时出现如下错误: 消息 515,级别 16,状态 2,过程 sp_add_job,第 137 行 不能将值 NULL 插入列 'owner_sid',表 ...
- 屌丝就爱尝鲜头——java8总结晒一晒
前两节讨论了那么多,这节就是两个议题,讨论了新增的日期的api,再说一说我的Java8的一些心得体会了. 首先,我们必须要搞清楚Java 8 为什么要增加新的日期的api,这是由于老的日期api非常的 ...
- Android开发Tips(5)
欢迎Follow我的GitHub, 关注我的CSDN. 介绍关于Android的一些有趣的小知识点. 本文是第五篇了, 差点儿一周一篇, 欢迎阅读. 其余第一篇, 第二篇, 第三篇, 第四篇. 1. ...
- TensorFlow练习7: 基于RNN生成古诗词
http://blog.topspeedsnail.com/archives/10542 主题 TensorFlow RNN不像传统的神经网络-它们的输出输出是固定的,而RNN允许我们输入输出向量 ...
- ASP.NET压力测试
本文导读:对于直接面对互联网用户的WEB应用,在开发设计的时候必须格外小心,因为谁也不知道在单位时间内WEB程序访问和运行的速度.所以,在程序设计完成以后,最后针对程序进行一些严格的甚至是苛刻的测试, ...