23

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

我在 bash 中有一个大项目,我需要记住使用 Q。到目前为止,我对Paul Lutus用python编写的程序(他以前的 Ruby 版本的翻版)很满意。

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

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

PS我相信bash代码的完整解析通常很复杂,因为不存在官方语言语法(但如果我错了请纠正我)。

4

4 回答 4

14

你可以编写 vim 来执行:“gg=G”,意思是“缩进所有文件”

于 2012-11-23T00:30:08.033 回答
13

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

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

请注意我是作者,所以建议可能有点偏颇:)

于 2018-03-11T19:33:21.943 回答
3

我发现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

于 2020-05-28T10:36:17.873 回答
0

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

使它“难”的原因在于,人们通常将引用的字符串视为单个词法标记,在 shell 中,每个元字符都是一个单独的词法标记,因此字符的含义可以根据其语法上下文而改变。

所以解析的token和用户想到的“shell words”不对齐,一个简单的带引号的字符串至少有3个token。

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

于 2021-05-19T15:44:27.617 回答