bash 文件可以有机器语言吗?

Sha*_*ari 6 bash shell-script

我在 Linux 上安装Anaconda Python。对于 Linux,Anaconda 提供了 bash 脚本,但文件很大,将近 300 MB。我决定看看原因,并在文本编辑器中打开它。

大约 95% 的文件是机器语言的乱码,像这样:

ºîØôЕzÒA¶©h¶¥R•„&´ìÒUÓçß3{^eÑòà(|ÄÃk뎆ºîØôЕzÒA¶©h¶¥R•„&´ìÒUÓçß3{™½ö|q ŽÖm¶¥¡ôÚ­gú¡@óìÛkkº£C»Iš)à÷¾Û¸êw½æõîJN7í×p€A¡ÈzÞÝï8
Run Code Online (Sandbox Code Playgroud)

该文件没有损坏,因为我可以安装 Python。

其中大部分都在许可证文件中,所以我想知道它是否是另一种语言的 unicode,但这不会占用 95% 的文件,是吗?

可以编译代码/机器语言吗?是否允许将机器代码放入 bash 文件中?

Run*_*ium 9

扩展@Graeme 的评论。

下载的脚本是一个带有嵌入 tarball 的 bash 脚本。该脚本部分首先由的md5sum验证压缩包,然后换成焦油,其中包含多个.tar.bz2档案。然后它通过使用自定义函数extract_dist()来解压缩档案。IE:

extract_dist python-2.7.10-0
extract_dist conda-3.14.1-py27_0
...
Run Code Online (Sandbox Code Playgroud)

提取文件:

python-2.7.10-0.tar.bz2
conda-3.14.1-py27_0.tar.bz2
...
Run Code Online (Sandbox Code Playgroud)

对于 32 位版本,可以通过以下方式提取脚本部分:

head -n 467 Anaconda-2.3.0-Linux-x86.sh
Run Code Online (Sandbox Code Playgroud)

对于 64 位版本,可以通过以下方式提取脚本部分:

head -n 466 Anaconda-2.3.0-Linux-x86_64.sh
Run Code Online (Sandbox Code Playgroud)

如您所见,脚本部分exit 0中止 bash 对脚本的任何进一步处理结束。

tarball 通过以下方式提取:

tail -n +469 $THIS_PATH | tar xf - --no-same-owner
tail -n +468 $THIS_PATH | tar xf - --no-same-owner
Run Code Online (Sandbox Code Playgroud)

分别为 32 位和 64 位。

例如,您可以这样做:

tail -n +469 Anaconda-2.3.0-Linux-x86.sh | tar -t
Run Code Online (Sandbox Code Playgroud)

列出 32 位存档中的文件。