2023年12月2日发(作者:)
shell脚本--创建bin可执行文件首先,我们需要了解做这件事的目的是什么。如果现在我们有一个shell脚本写的bin文件(文件名myhello),这个文件里面的内容为:打印hello world,那么我们直接拿过来执行即可(sh myhello),或者将这个文件放到/bin/目录下,随便哪个目录输入myhello即可。现在的情况就是,我只提供一个bin文件给你,这个文件中有安装脚本还有二进制文件内容(打开是乱码),文件前面是安装脚本后面是安装包内容,在程序运行过程中,会将二进制文件内容打包为一个压缩文件,然后解压拿到内容,然后处理完业务,最后可以将其删除。这样做的好处就是,我不会直接提供给你安装文件,我只提供bin文件给你。接下来,就来看这个bin文件的制作过程。(1)写一个文件hello,输出hello world,这个就是我们的二进制文件,可以是shell编写的,也可以是Python编写的#!/bin/bash# 打印hello worldecho ""(2)将文件hello打包,或者2都行打包和解压可以参考以下命令,这里提供一下,防止有的人忘了。1. 打包压缩tar -zcvf pack/ #打包压缩为一个.gz格式的压缩包tar -jcvf 2 pack/ #打包压缩为一个.bz2格式的压缩包tar -Jcvf pack/ #打包压缩为一个.xz格式的压缩包2. 解包解压tar -zxvf /pack #解包解压.gz格式的压缩包到pack文件夹tar -jxvf 2 /pack #解包解压.bz2格式的压缩包到pack文件夹tar -Jxvf /pack #解包解压.xz格式的压缩包到pack文件夹这里选择的格式打包tar -zcvf hello打包好后,这就是一个二进制的安装文件。(3)接下来,我们写一个安装脚本install_,用来安装这个文件的。#!/bin/bashinstall_dir=/tmp/helloif [ -d "$install_dir" ];then rm -rf "$install_dir" mkdir "$install_dir"else mkdir "$install_dir"fised -n '1,/^exit 0$/!p' $0 > $install_dir/ $install_dirtar -zxvf 0这个安装脚本的内容是,创建一个安装目录,然后将该文件的“exit 0”以后的内容输出到安装目录下的一个压缩文件中,这个会自动创建,然后cd到安装目录,将安装文件的压缩包解压,解压后里面的内容你想怎么用就怎么用了。显然,该安装脚本exit 0后面没有内容,因此,这个文件我们先写好,不用执行。注意:sed -n '1,/^exit 0$/!p' $0 > $install_dir/,这句话可能有点难理解,意思就是当前文件中除了第一行和exit 0所在行中间的部分,也就是exit 0后面的内容,输出到$install_dir/文件中。$0是当前脚本的名,也就是install_。(4)制作bin文件,其实就是将安装脚本的内容和安装文件压缩包的内容拼接在一起,新生成一个文件,这个文件的内容为:前面是安装脚本install_的内容,后面是安装文件压缩包的内容。这样一来,文件的exit 0后面就有内容了,就是安装文件压缩包的内容。cat install_ > 至此,bin文件已经制作完成,可以直接运行sh 。运行完后,我们在安装目录/tmp/hello下面就会看到由解压得到的hello。可以拿hello里面的内容处理业务,这个里面不一定非要是一个可以运行的脚本,可以是任何文件。注意:sed -n '1,/^exit 0$/!p' $0 > $install_dir/中的,这个名字随便取,可以跟原来的安装文件压缩包不一样。一般都写成一样的。


发布评论