在平时通过shell脚本部署一个服务和应用时,除了自身的脚本外可能还依赖一些二进制文件,如何将二者一起打包发布,使其变为一个可执行文件,方便后期维护和使用
为实现以上目标可以使用sed
实现,具体流程如下:
- 前期使用
cat
将两个文件合并为一个文件 - 后期运行是通过
sed
将两个文件分开,后在具体操作
测试脚本
1 2 3
| #!/bin/bash
echo "This is test shell"
|
打包测试脚本(如同二进制文件)
1
| tar zcvf test.tar.gz test.sh
|
在实际应用中可以根据实际需要使用其他二进制文件
运行测试脚本(run.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #!/bin/bash
set -x
echo "Test shell+bin" mkdir tmp
sed -n '1,/^exit 0$/!p' $0 > ./tmp/test.tar.gz
cd tmp tar zxvf test.tar.gz bash ./test.sh cd -
exit 0
|
sed -n '1,/^exit 0$/!p' $0 > ./tmp/test.tar.gz
命令用于将后面cat
合并两个文件重新分开,并执行
- 当前文件中除了
第一行
和exit 0
所在行中间的部分,也就是exit 0
后面的内容,输出到./tmp/test.tar.gz
。$0
是当前脚本的名,也就是run.sh
exit 0
在这里可以看作一个分割标志,可以使用其他字符串代替
合并可执行文件
1
| cat run.sh test.tar.gz > run-tst.sh
|
重新生成的运行脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/bash
set -x
echo "Test shell+bin" mkdir tmp
sed -n '1,/^exit 0$/!p' $0 > ./tmp/test.tar.gz
cd tmp tar zxvf test.tar.gz bash ./test.sh cd -
exit 0 ^_?^H^@^@^@^@^@^@^C??AK?0^T^G?^?O?\?[??^M?&?GO?^B?^ZL???d?^S(;{???N?ɛ^H~?֯a?^^??@^YC??^H<??=x?8e???`??????r?????DȀ???I?d"^Cƅ^_^H??u?/^K???(X^[????????????T?Ynu^T?Z^Tә)^U???*^L3r?????^K???ϖ?*??T^W>=iT? TAS??3^RL?????n?^Ri?~??~?m???^S??[?p֮n?????^O?*;o̕3u^Uf^?Y:Rs]?`??%^????jU?????^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@??;??z^]^@(^@^@
|
shell加密——shc
将shell脚本转换为一个可执行的二进制文件,可以保护shell脚本中的一些敏感信息和具体的执行步骤。