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

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

把几个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

最新文章

  1. Spark源码编译并在YARN上运行WordCount实例
  2. 机器学习笔记—svm算法(上)
  3. POJ2342 树形dp
  4. Interpolation in MATLAB
  5. 使用substring方法进行字符串拆分
  6. java学习笔记--IO流
  7. NYOJ题目10505C?5S?
  8. GNU for x86汇编语法
  9. windows phone(成语典籍游戏开发)
  10. apache的prefork的详解
  11. TDD 用语
  12. UVA 12166 Equilibrium Mobile
  13. vnc server配置、启动、重启与连接,图形管理linux系统
  14. 第一个spark+scala程序
  15. 利用gulp,当引入文件改动时,版本号自动更新~
  16. #WEB安全基础 : HTML/CSS | 0x11 浅谈GET和POST
  17. 查询EBS系统在线人数
  18. 如何用Client OM获取页面上一个Content web part的内容
  19. 女生学java是否真的没有优势
  20. Qt tableWidget 空单元格 获取选中行行号

热门文章

  1. python的重试库tenacity用法以及类似库retry、requests实现
  2. HDOJ 4869 Turn the pokers
  3. GIST特征描述符使用
  4. iOS开发-UITextView实现PlaceHolder的方式
  5. iOS 开发-Certificate、App ID和Provisioning Profile之间的关系
  6. 生成Markdown目录 字符串解析 MD
  7. Jetpack 架构组件 Lifecycle 生命周期 MD
  8. 【Scala】Scala-使用ExecutorService-等待所有线程完成
  9. 用keras实现lstm 利用Keras下的LSTM进行情感分析
  10. 多维数组分解----SVD在推荐系统中的应用-