ada*_*009 21 performance shell compiling compiler
经过一番谷歌搜索,我找到了一种将 BASH 脚本编译为二进制可执行文件的方法(使用shc
)。
我知道 shell 是一种解释性语言,但是这个编译器有什么作用呢?它会以任何方式提高我的脚本的性能吗?
Ste*_*itt 55
为了回答标题中的问题,编译的 shell 脚本可能会提高性能——如果编译的结果代表解释的结果,而不必一遍又一遍地重新解释脚本中的命令。参见例如ksh93
'sshcomp
或zsh
'szcompile
。
但是,shc
不会以这种方式编译脚本。它不是真正的编译器,而是一个脚本“加密”工具,具有各种有效性可疑的保护技术。当您使用 编译脚本时shc
,结果是一个二进制文件,其内容不能立即读取;当它运行时,它会解密其内容,并使用解密的脚本运行该脚本旨在用于的工具,从而使原始脚本易于检索(它在解释器的命令行上完整传递,并带有额外的间距以试图使比较难找)。所以整体性能总是会更差:除了运行原始脚本所花费的时间之外,还有设置环境和解密脚本所花费的时间。
小智 34
经过一番谷歌搜索,我找到了一种将 BASH 脚本编译为二进制可执行文件的方法(使用
shc
)。
非常不幸的shc
是,即使这些年来它已被完全揭穿,该装置仍然出现在 google 搜索结果中:shc
它不是编译器,并且不会阻止脚本的源代码被查看和“被盗”。
如果有的话, shc 甚至比它必须的更愚蠢,因为在解开脚本源之后,它只是将它作为参数传递给bash -c
,这意味着它对/proc/<pid>/cmdline
任何用户都是可见的,而不仅仅是运行脚本的用户。这也遇到了 Linux 对单个命令行参数(128k 字节)的长度限制。但是为了让事情变得更加荒谬,该论点的第一部分充满了空格,因此它没有出现在ps
;-)
它会以任何方式提高我的脚本的性能吗?
是的,您的脚本可能根本无法运行,这意味着它会更快终止。
一般来说,没有办法编译shell脚本,因为在运行时可以通过多种方法引入新的源文本,因此绕过了编译阶段。该新源将无法与编译的函数或变量进行交互。
创建运行时源的两种方法是:
源自原始脚本编译后可能已创建或修改的辅助文件。
在运行时构造一个字符串中的任意命令,并执行它。
归档时间: |
|
查看次数: |
3694 次 |
最近记录: |