寻找可用于 bash 代码的命令行代码格式化程序。它必须是可配置的,并且最好可以从命令行使用。
我在bash中有一个大项目,我需要考虑使用Q.到目前为止,我很高兴Paul Lutus编写的一个用 python 编写的程序(他在Ruby中重新编写了他以前的版本)。
请参阅http://arachnoid.com/python/beautify_bash_program.html(此处也克隆https://github.com/ewiger/beautify_bash)。
但我想学习这个工具的任何严肃替代方案(如果存在的话)。要求:它应该提供足够强大的性能和处理/解析相当复杂的代码的行为。
PS我认为完全解析bash代码通常很复杂,因为没有官方语言语法(但如果我错了,请纠正我)。
答案 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'
答案 3 :(得分:0)
相反,shell 确实有严格的语法。 它在 ISO 标准和 Bash 和其他 shell 的文档中用英语描述,在 Bash 源代码树的 shell.y 文件中用正式术语描述。
使它变得“困难”的是,人们通常认为,比如说,一个带引号的字符串是单个词法标记,在 shell 中,每个元字符都是一个单独的词法标记,因此一个字符的含义可以根据它的不同而改变语法上下文。
所以解析token与用户想到的“shell词”不符,一个简单的引用字符串至少有3个token。
这些实现通常采取一些捷径,包括使用多个词法分析器,根据语法是在引号内、在数字上下文内还是在两者之外进行选择。