如何为 FreeBSD 编译二进制 shell 脚本?我尝试了 Linux 二进制模拟器,但是不起作用。
答案1
解决方案是仅使用 ksh 而不是 [ba]sh 作为脚本解释器。
答案2
二进制 shell 脚本(脚本意味着非二进制)实际上并不存在 - 尽管可以在 shell 脚本的末尾附加一个可执行二进制文件或压缩文件,它通常只包含一个 tail 命令来剥离 shell 脚本并解压缩/预处理并执行二进制文件。
如果正确设置,脚本应该包含要使用的 shell(#!/bin/sh 将是传统的 unix 默认值),或者应该只使用所有 shell 通用的命令。简单的做法是将其设为只读以确保安全,然后用 vi 打开并查看,然后自己在文件上执行有效负载命令(根据需要进行调整 - 通常重点是设置一些环境变量或进行一些预处理,通常包括解压缩)。
答案3
该shc
程序不是真正的 shell 编译器。从手册页:
shc 本身不是像 cc 这样的编译器,而是对 shell 脚本进行编码和加密,并生成具有附加过期功能的 C 源代码。然后,它使用系统编译器编译一个剥离的二进制文件,其行为与原始脚本完全相同。执行时,编译后的二进制文件将使用 shell -c 选项解密并执行代码。不幸的是,它不会像真正的 C 程序那样为您带来任何速度提升
有些脚本语言(例如 Python)在执行脚本之前会将其转换为字节码。可交互使用的 Shell 通常不会这样做,它们只是解释器。
fork
甚至可以说,除了变量、循环和其他控制结构等一些装饰外,shell 大多是和函数的前端exec
。