shell脚本的漂亮打印

时间:2010-10-21 12:25:02

标签: bash scripting shell indentation

我正在寻找类似indent但类似于(bash)脚本的东西。仅限控制台,无着色等。

你知道吗?

6 个答案:

答案 0 :(得分:5)

Vim可以缩进bash脚本。但是在缩进之前不要重新格式化它们 备份您的bash脚本,使用vim打开它,键入gg=GZZ并缩进将更正。 (注意不耐烦:这会覆盖文件,所以一定要做备份!)

虽然,<<的一些错误(期望EOF作为一行中的第一个字符)例如

编辑:ZZ不是ZQ

答案 1 :(得分:2)

派对有点晚了,但看起来shfmt可以帮你解决问题。

答案 2 :(得分:1)

在bash中我这样做:

reindent() {
source <(echo "Zibri () {";cat "$1"; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3 | sed -e "s/^\s\s\s\s//"
}

这消除了评论并重新编写了剧本“bash方式”。

如果您的脚本中有HEREDOCS,则它们会被上一个函数中的sed破坏。

所以使用:

reindent() {
source <(echo "Zibri () {";cat "$1"; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3"
}

但是你的所有脚本都有4个空格缩进。

答案 3 :(得分:0)

shfmt效果很好。

您可以设置bash脚本的格式,还可以通过预提交的钩子检查格式。

# reformat
shfmt -l -w script.sh

# check if the formatting is OK
shfmt -d script.sh

# works on the whole directory as well
shfmt -l -w .

唯一缺少的选项是它不会根据行长(yet)重新格式化。

由于它是用go编写的,因此您可以下载大多数平台的二进制文件,例如特拉维斯(.travis.yml):

install:
  - curl -LsS -o ~/shfmt https://github.com/mvdan/sh/releases/download/v3.1.2/shfmt_v3.1.2_linux_amd64
  - chmod +x ~/shfmt
script:
  - ~/shfmt -d .

npm上还有一个交叉编译的js版本和许多编辑器插件(请参见related projects

答案 4 :(得分:0)

bash5 +具有--pretty-print选项。.尽管它将删除注释,包括第一行'#!/ bin ...'

答案 5 :(得分:-1)

找到此http://www.linux-kheops.com/doc/perl/perl-aubert/fmt.script

非常好,我拿出的只有一件事是[...] - &gt;测试替代。