一些软件(例如NetBeans IDE)将Linux安装程序运到了.sh文件.我很好奇他们是如何将整个IDE"打包"成一个"shell脚本"的,我在一个编辑器中打开了这个文件.我看到一些纯文本shell脚本代码,然后是一些随机乱码,我认为是"二进制"或非纯文本.
我想知道他们是如何混合普通的shell脚本,然后可能会称之为"不可读"的东西,即二进制文件.
对此有什么见解吗?
一些软件(例如NetBeans IDE)将Linux安装程序运到了.sh文件.我很好奇他们是如何将整个IDE"打包"成一个"shell脚本"的,我在一个编辑器中打开了这个文件.我看到一些纯文本shell脚本代码,然后是一些随机乱码,我认为是"二进制"或非纯文本.
我想知道他们是如何混合普通的shell脚本,然后可能会称之为"不可读"的东西,即二进制文件.
对此有什么见解吗?
基本上,它是一个shell脚本,预先添加到某种压缩归档文件中,比如tar归档文件.在自己身上使用tail
或sed
命令(Bourne shell中的$0
变量)go 掉前面的shell脚本,并将其余的传递给unarchiver.
例如,将以下脚本创建为self-extracting
:
#!/bin/sh -e
sed -e '1,/^exit$/d' "$0" | tar xzf - && ./project/Setup
exit
上面的sed
命令删除从文件第一行到以"exit"开头的第一行的所有行,然后将其余的行传递给用户.如果在"exit"行之后立即开始的是tar文件,tar
命令将提取它.如果成功,将执行./project/Setup
文件(可能是从tarball中提取的).
然后:
mkdir project
echo "#!/bin/sh" > project/Setup
echo "echo This is the setup script!" >> project/Setup
chmod +x project/Setup
tar czf - project >> self-extracting
现在,如果你go 掉旧的project
目录,你可以运行self-extracting
,它将提取tar文件并运行安装脚本.