概要
在项目发布部署包或者升级包的时候, 往往是可执行文件和资源文件一起打包, 常规的方式是用tar制作压缩包, 然后在拷贝到目标机器, 解压,执行.
不过如果省去手动解压这一步, 直接执行升级包, 是不是更帅气一点
原理
将需要执行的脚本和升级包,用cat命令把两个文件拼到一起,如cat main.sh xx.pkg > yy.pkg
利用tar或者其他支持从标准输入读取压缩包的命令,用tail -n 压缩包内容的行数 ,把压缩包的内容输出给tar解压;如果解压缩的命令不支持从标准输入读取, 那么可以把tail命令的输出先保存起来,然后再执行解压缩
剩下的事情就是执行解压后的升级包里的命令,或者其他的shell命令
示例
main.sh 用于和升级包拼接到一起,如果升级包的类型不是tar.gz,只需要修改下解压缩升级包的代码即可
#!/bin/bash
FILE_PATH="$0"
cd $(dirname $FILE_PATH)
FILE_NAME=${FILE_PATH##*/}
CURR_DIR=$(pwd)
EXTRACT_DIR=$CURR_DIR/.extract
MAIN_EXE=$EXTRACT_DIR/codes/main.sh
function main()
{
local total_lines=$(cat $FILE_NAME | wc -l)
total_lines=$(expr $total_lines + 1)
# __END__ mark end of file
local code_lines=$(sed '/^# __END__$/q' $FILE_NAME | wc -l)
local pkg_lines=$((total_lines - code_lines))
rm -rf $EXTRACT_DIR 2>/dev/null && mkdir $EXTRACT_DIR
tail -n $pkg_lines $FILE_NAME | tar -xz -C $EXTRACT_DIR
chmod +x $MAIN_EXE
$MAIN_EXE
return 0
}
main $@
# need
exit $?
# do not append newline or anything after __END__
# __END__
原文:https://blog.csdn.net/zhedanxc/article/details/78233393