是否有任何语言可以编译为 Bash?

问题描述 投票:0回答:9

我既喜欢又讨厌编写 Bash。我喜欢它在文件操作和处理进程方面的so简化(我同意这个流行问题,它在这方面比Python、Ruby等要好得多),但我讨厌它的语法,特别是围绕条件、循环等

(这是主观的,但我觉得它既令人困惑又烦人。例如,阅读时为

$var
,但写作时为
var
;如果
=
周围有空格,则静默写入失败;使用正则表达式时 ifs 中的双括号;有时是双分号,其他是单分号等)

作为 CoffeeScript(编译为 JS)的忠实粉丝,我一直想知道:是否有任何语言具有 Python/Ruby/CoffeeScript 等语言的美学/语法,但作为 Bash 而不是其他语言之一进行编译和运行运行时间?

例如我希望能够用更简单的语法编写大部分 Bash:

$AGGREGATE_FILENAME = 'allfiles.txt'

if not exists $AGGREGATE_FILENAME
    touch $AGGREGATE_FILENAME

for $file in files/*
    cat $file >> $AGGREGATE_FILENAME

switch $1
    case 'test'
        run-tests
        echo 'Tests finished!'
    case 'deploy'
        echo 'Packaging...'
        mv foo bar/
        deploy-bar

这是一个超级人为的示例,语法是一个稻草人(主要受 CoffeeScript 启发,但保留了一流命令的基本 Bash 概念、与变量分离和松散类型)。

无论如何,这只是一个问题和思考。我非常希望能够用比 Bash 更好的语言编写脚本。 =)谢谢!

bash shell scripting coffeescript
9个回答
23
投票
域特定语言

),可将 C 语法语言编译为 Bash(和 Windows Batch)。

    项目
  • 在线演示

15
投票
结果

)并开始了powscript

powscript

与上述工具的区别

极其便携的预处理器(100% bash)
  • coffeescript 和 bash 之间的平衡
  • 无忧的便携式全合一文件编译器/运行时,用 bash 编写
  • 松散的转译器:内联 bash 总是可能的

13
投票

Plumbum 是用 Python 实现的,看起来相当可靠:

http://plumbum.readthedocs.org/en/latest/index.html

ShellJS 是在 Node.js 上实现的,看起来也不错:

https://github.com/arturadib/shelljs

令人兴奋的进展!我很期待尝试一下。如果您已经拥有,很高兴在评论中听到您的经历。谢谢!


7
投票

https://github.com/tdenniston/bish

具有现代感的 Shell 脚本。

Bish 是一种轻量级语言,旨在将 shell 脚本带入 21 世纪。它为程序员提供了现代语法的便利,但可以编译为 Bash,从而实现良好的可移植性(与 Bash 的可移植性一样)。


6
投票

由于您可能不需要函数级互操作性来调用用 Bash 编写的函数,因此最好使用完全不同的东西。 Perl 与 Bash 很接近,都令人讨厌,充满了快捷方式和奇怪的语法,但它的语义大多是合理的。 Python 不太适合诸如启动进程之类的事情,但对于一般系统编程来说要好得多,干净且易于维护。 Python 拥有适用于所有事物的优秀库和模块; Perl 甚至更好。


4
投票
BashClass

的语言,它是面向对象,具有类型检查并允许多维数组。语言语法受到不同编程语言的启发。 这是一个关于如何实现

List

类的示例(完整示例

此处
): class List extends Object { var Object[] data = new Object[]; var int size = 0; constructor List(){ super_constructor(); } function void add(var Object object) { data[size] = object; size = size + 1; } function void pop() { if(size == 0) { exception("Cannot remove element from an empty list"); } size = size - 1; data[size] = null; } function int size() { return size; } function Object get(var int index) { if(index < 0 || index >= size) { exception("Cannot access element out of bound"); } return data[index]; } }

BashClass 中的类和多维数组转换为 Bash 4.4 关联数组。该语言是第一个版本,并且在 
Github

上开源。请随意贡献和建议功能。


3
投票

http://www.zsh.org


2
投票
nscript

,您可以在其中使用 javascript 编写 shell 脚本。所有常见的 bash 结构都在那里,如退出代码、管道、流重定向、参数扩展、通配符、提示符等。


0
投票
Amber

,一种新的编程语言,旨在帮助您以更有效的方式编写 shell 脚本。 它与 EcmaScript 语法相似,因此您应该看起来很熟悉。

与常规 shell 脚本相比,它在三个方面表现出色:

它具有现代且熟悉的语法。
  1. 它是类型安全的,确保稳健的错误处理。
  2. 它是运行时安全的,这意味着编译器会强制您处理所有潜在的错误。
在这里查看琥珀

© www.soinside.com 2019 - 2024. All rights reserved.