shell脚本--创建bin可执行文件

2023-05-16

首先,我们需要了解做这件事的目的是什么。

如果现在我们有一个shell脚本写的bin文件(文件名myhello),这个文件里面的内容为:打印hello world,那么我们直接拿过来执行即可(sh myhello),或者将这个文件放到/bin/目录下,随便哪个目录输入myhello即可。现在的情况就是,我只提供一个bin文件给你,这个文件中有安装脚本还有二进制文件内容(打开是乱码),文件前面是安装脚本后面是安装包内容,在程序运行过程中,会将二进制文件内容打包为一个压缩文件,然后解压拿到内容,然后处理完业务,最后可以将其删除。这样做的好处就是,我不会直接提供给你安装文件,我只提供bin文件给你。

接下来,就来看这个bin文件的制作过程。

(1)写一个文件hello,输出hello world,这个就是我们的二进制文件,可以是shell编写的,也可以是Python编写的

#!/bin/bash

# 打印hello world
echo "Hello World..."

(2)将文件hello打包,tar.gz或者tar.bz2都行

打包和解压可以参考以下命令,这里提供一下,防止有的人忘了。

1. 打包压缩
tar -zcvf pack.tar.gz pack/  #打包压缩为一个.gz格式的压缩包
tar -jcvf pack.tar.bz2 pack/ #打包压缩为一个.bz2格式的压缩包
tar -Jcvf pack.tar.xz pack/  #打包压缩为一个.xz格式的压缩包
2. 解包解压
tar -zxvf pack.tar.gz /pack  #解包解压.gz格式的压缩包到pack文件夹
tar -jxvf pack.tar.bz2 /pack #解包解压.bz2格式的压缩包到pack文件夹
tar -Jxvf pack.tar.xz /pack  #解包解压.xz格式的压缩包到pack文件夹

这里选择tar.gz的格式打包

tar -zcvf hello.tar.gz hello

打包好后,这就是一个二进制的安装文件。

(3)接下来,我们写一个安装脚本install_hello.sh,用来安装这个文件的。

#!/bin/bash

install_dir=/tmp/hello

if [ -d "$install_dir" ];then
        rm -rf "$install_dir"
        mkdir "$install_dir"
else
        mkdir "$install_dir"
fi

sed -n '1,/^exit 0$/!p' $0 > $install_dir/hello.tar.gz

cd $install_dir
tar -zxvf hello.tar.gz

exit 0

这个安装脚本的内容是,创建一个安装目录,然后将该文件的“exit 0”以后的内容输出到安装目录下的一个压缩文件hello.tar.gz中,这个会自动创建,然后cd到安装目录,将安装文件的压缩包解压,解压后里面的内容你想怎么用就怎么用了。显然,该安装脚本exit 0后面没有内容,因此,这个文件我们先写好,不用执行。

注意:sed -n '1,/^exit 0$/!p' $0 > $install_dir/hello.tar.gz,这句话可能有点难理解,意思就是当前文件中除了第一行和exit 0所在行中间的部分,也就是exit 0后面的内容,输出到$install_dir/hello.tar.gz文件中。$0是当前脚本的名,也就是install_hello.sh。

(4)制作bin文件,其实就是将安装脚本的内容和安装文件压缩包的内容拼接在一起,新生成一个文件myinstall.bin,这个文件的内容为:前面是安装脚本install_hello.sh的内容,后面是安装文件压缩包hello.tar.gz的内容。这样一来,myinstall.bin文件的exit 0后面就有内容了,就是安装文件压缩包hello.tar.gz的内容。

cat install_hello.sh hello.tar.gz > myinstall.bin

至此,bin文件已经制作完成,可以直接运行sh myinstall.bin。运行完后,我们在安装目录/tmp/hello下面就会看到由hello.tar.gz解压得到的hello。可以拿hello里面的内容处理业务,这个里面不一定非要是一个可以运行的脚本,可以是任何文件。

注意:sed -n '1,/^exit 0$/!p' $0 > $install_dir/hello.tar.gz中的hello.tar.gz,这个名字随便取,可以跟原来的安装文件压缩包不一样。一般都写成一样的。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell脚本--创建bin可执行文件 的相关文章

随机推荐