用于bash的代码格式化器/美化器(在命令行中)?

时间:2012-08-21 00:11:10

标签: bash command-line code-formatting

寻找可用于 bash 代码的命令行代码格式化程序。它必须是可配置的,并且最好可以从命令行使用。

我在bash中有一个大项目,我需要考虑使用Q.到目前为止,我很高兴Paul Lutus编写的一个用 python 编写的程序(他在Ruby中重新编写了他以前的版本)。

请参阅http://arachnoid.com/python/beautify_bash_program.html(此处也克隆https://github.com/ewiger/beautify_bash)。

但我想学习这个工具的任何严肃替代方案(如果存在的话)。要求:它应该提供足够强大的性能和处理/解析相当复杂的代码的行为。

PS我认为完全解析bash代码通常很复杂,因为没有官方语言语法(但如果我错了,请纠正我)。

4 个答案:

答案 0 :(得分:9)

你可以编写vim脚本:“gg = G”表示“缩进所有文件”

答案 1 :(得分:2)

您可以尝试shfmt。它实现了自己的shell解析器,包括Bash支持,因此它比基于纯文本的工具更强大。

解析器和打印机都可以作为Go包使用,因此编写一个20行的Go程序来操作或使用shell代码应该很容易。

答案 2 :(得分:0)

我发现内置的type将以格式化的方式打印功能。

#/usr/bin/env bash

source <(cat <(echo 'wrapper() {') - <(echo '}'));
type wrapper | tail -n +4 | head -n -1 | sed 's/^    //g'

https://github.com/bas080/flush

答案 3 :(得分:0)

相反,shell 确实有严格的语法。 它在 ISO 标准和 Bash 和其他 shell 的文档中用英语描述,在 Bash 源代码树的 shell.y 文件中用正式术语描述。

使它变得“困难”的是,人们通常认为,比如说,一个带引号的字符串是单个词法标记,在 shell 中,每个元字符都是一个单独的词法标记,因此一个字符的含义可以根据它的不同而改变语法上下文。

所以解析token与用户想到的“shell词”不符,一个简单的引用字符串至少有3个token。

这些实现通常采取一些捷径,包括使用多个词法分析器,根据语法是在引号内、在数字上下文内还是在两者之外进行选择。