概要
在項目發佈部署包或者升級包的時候, 往往是可執行文件和資源文件一起打包, 常規的方式是用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