一些软件(例如NetBeans IDE)将Linux安装程序运到了.sh文件.我很好奇他们是如何将整个IDE"打包"成一个"shell脚本"的,我在一个编辑器中打开了这个文件.我看到一些纯文本shell脚本代码,然后是一些随机乱码,我认为是"二进制"或非纯文本.

我想知道他们是如何混合普通的shell脚本,然后可能会称之为"不可读"的东西,即二进制文件.

对此有什么见解吗?

推荐答案

基本上,它是一个shell脚本,预先添加到某种压缩归档文件中,比如tar归档文件.在自己身上使用tailsed命令(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文件并运行安装脚本.

Linux相关问答推荐

GO:当使用NewManager调用创建cgroup时,权限被拒绝

PERF显示不应该执行指令的内核的用户空间周期

Linux在所有多行中用新值替换整个列

UTF-8输入和使用XGetICValues

在Groff mm中定义页眉不会更改第一页中的页眉

将十六进制文件名转换为十进制

从 MariaDB 连接到 Oracle 时出现错误消息libsqora.so.11.1:找不到文件

awk内部的变量操作

提交SLURM作业(job)时出现nohup问题

使用 Bash 获取特定文件的 mtime?

Linux 非阻塞 fifo(按需日志(log)记录)

带有 curl 的 Linux 脚本来判断 Web 服务是否已启动

PuTTY:更改默认 SSH 登录目录

将参数传递给 awk 脚本文件

在 Linux 上用 C 语言读写串口

Linux:处理成服务

Hierarchical分层 ldd(1)

在类 Unix 系统中上次运行的 cron 作业(job)的详细信息?

如何限制堆大小?

构建窗口管理器