最近的項目須要客戶端從服務器獲取到文件後自動執行;因爲可執行程序中有相關配置文件,而且運行前要進行環境變量的配置,因此不能直接下載可執行程序運行,上網搜了一下解決方法,發現能夠打成bin包,下載時下載這個bin文件,而後運行,先進行解包安裝,而後再腳本里配置環境變量,最後運行程序;shell
bin包的製做須要三步:一、 編寫shell腳本文件; 二、 對可執行程序及相關文件進行打包壓縮; 三、 使用cat命令把這兩個文件封裝成一個bin安裝包;服務器
最後生成的bin文件是一個前半部分爲shell腳本文件,後半部分爲二進制壓縮包文件的文件;咱們直接運行這個bin文件,會首先執行前半部分的腳本,因此咱們須要再腳本里編寫程序把後半部分的壓縮包分解出來,並進行解壓和運行;app
1、 編寫shell腳本;spa
腳本文件主要功能是把cat命令打包進bin文件中的二進制壓縮包分離出bin文件,並進行解壓;分離操做能夠用兩種方法來作:sed命令和tail命令;.net
一、 使用sed命令code
sed -n -e '1,/^exit 0$/!p' $0 >xxx.tgz 2>/dev/null
二、 使用tail命令blog
tail +$lines $0 >xxx.tgz
可是使用中發現第一種方法並不能成功分離出壓縮文件,不知道什麼緣由,研究了一下午也沒解決,對比cat封裝前的壓縮包和分離出來的壓縮包,發現文件大小是同樣的,我用diff命令對比兩個文件,發現兩個文件並不同,最後用vi打開兩個文件對比,發現分離後的壓縮包裏面多了不少換行;it
好在第二種方法能夠;io
下面是個人install.sh文件class
#!/bin/sh lines=12 temptar=/tmp/qoe.tgz workpath=/tmp/qoe tail -n +$lines $0 >${temptar} tar xzf ${temptar} -C /tmp rm -rf ${temptar} cd ${workpath} export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/upt/framework/saf/rootfs/usr/lib:/opt/upt/framework/saf/rootfs/lib ./testapp -daemon exit 0
2、對可執行程序進行打包
新建一個目錄,把運行須要的全部文件拷貝進去,而後使用tar命令進行打包:
tar -czvf qoe.tgz qoe/
3、使用cat命令封裝爲bin
cat install.sh qoe.tgz > qoe.bin
最後完成
chmod +x qoe.bin
./qoe.bin
成功運行
參考資料:
https://www.jianshu.com/p/9f2919484317
https://blog.csdn.net/jswawawa/article/details/72318024?locationNum=3&fps=1
https://blog.csdn.net/lien0906/article/details/52689185