linux下自解壓包製作

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章