问题,讨论主题
我对编写命令行shell脚本源代码非常感兴趣,这些源代码是用更健壮,性能更好且独立于平台的编译语言(例如OCaml)编写的代码编写的.基本上,您可以使用编译语言编程来执行与您想要的操作系统的任何交互(我建议:更复杂的交互或以平台无关的方式不容易做到的交互),最后您将编译它到本机二进制可执行文件(最好),它会生成一个shell脚本,在shell中生成你在编译语言中编写的内容.[ 补充 ]:使用'效果',我的意思是设置环境变量和shell选项,执行某些非标准命令(标准脚本'glue'将由编译的可执行文件处理,并将保留在生成的shell脚本之外)等等.
到目前为止我还没有找到任何此类解决方案.与今天的其他可能性相比,实现它似乎相对容易*,比如将OCaml编译为JavaScript.
- 是否已经(公开)实现了我所描述的内容?
- 与我所描述的(非常)相似的其他可能性有哪些,以及它们与此有何不同?(脑到语编译(从编译到sh)会浮现在脑海中,虽然这似乎不必要地难以实现.)
我不是故意的
- 另一种shell(如Scsh).您管理的系统可能并不总是允许用户或一个管理员选择shell,我也希望它是一个专门为其他人(客户,同事和其他人)提供的系统管理解决方案,也是不能指望的人接受不同的外壳.
- 另一种解释器,用于非交互式shell脚本通常用于的目的(如ocamlscript).就个人而言,我没有为此目的避免shell脚本的问题.我这样做是因为shell脚本通常难以维护(例如,对某些字符敏感并且操纵可变的东西,如'命令'),并且难以制作到与流行的通用编程语言可提供的功能相同的水平(对于例如,在这方面比较Bash和Python).但是,在某些情况下需要使用本机shell脚本,例如shell启动时由shell发送的shell配置文件.
背景
实际应用
你们中的一些人可能怀疑我所描述的实际用途.这样做的一个实际应用是根据各种条件定义一个shell配置文件(例如,配置文件来源的系统平台/操作系统,安全策略后面的内容,具体shell,登录/非登录类型shell,交互/非交互式shell).作为shell脚本的(精心设计的)通用shell配置文件的优势在于性能的提高(可能生成压缩/优化的源代码而不是人工编写的脚本解释的本机机器代码),健壮性(类型检查,异常处理) ,编译功能的时间验证,生成的二进制可执行文件的加密签名),功能(更少或不依赖于用户域CLI工具,不限制使用所有可能平台的CLI工具所涵盖的最低功能)和跨平台功能(在像单一UNIX规范这样的实践标准只是意味着很多,而且很多shell配置文件概念都会转移到非Windows平台,如同PowerShell一样.
实施细节,附带问题
- 程序员应该能够控制生成的shell脚本的通用程度.例如,可能是每次运行二进制可执行文件并输出适当的shell配置文件代码,或者它可以简单地生成针对一次运行的情况定制的固定shell脚本文件.在后一种情况下,列出的优势 - 特别是那些稳健性(例如异常处理和依赖用户工具)的优势更加有限.[添加]
- 生成的shell脚本是以某种形式的通用shell脚本(如GNU autoconf生成)还是shell(原生脚本)适应(动态或不适用于)特定shell对我来说不是主要问题.
- easy*:在我看来,这可以通过在库中为基本的shell内置函数提供基本可用的函数来实现.这样的函数只是将自身加上传递的参数转换为语义上合适且语法正确的shell脚本语句(作为字符串).
感谢您的进一步想法,特别是对于具体的建议!