我正在寻找类似于 indent 的东西,但适用于 (bash) 脚本。只能在控制台中使用,不能有着色等功能。
你知道有类似的工具吗?
你知道有类似的工具吗?
gg=GZZ
,缩进将被纠正。(注意:这会覆盖文件,所以一定要备份!)
然而,一些问题可能会出现<<
(期望EOF作为第一个字符在一行上)例如
编辑:应为ZZ而非ZQ。
cp -p $script{,.$(date -Is)}
进行备份,可以得到一个文件,可以使用 diff -cw
进行比较,从而证明这个解决方案对我测试过的一个相当复杂的 shell 脚本非常有效。(没有 <<
的文本) - Andrew Bealsbash5+有一个--pretty-print选项。它可以删除注释,包括第一行的“#!/bin...”
在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"
}
reindent ()
{
rstr=$(mktemp -u "XXXXXXXXXX");
source <(echo "Zibri () {";cat "$1"|sed -e "s/^\s\s\s\s/$rstr/"; echo "}");
echo '#!/bin/bash';
declare -f Zibri | head --lines=-1 | tail --lines=+3 | sed -e "s/^\s\s\s\s//;s/$rstr/ /"
}
which还可以处理heredocs。
shfmt 很好用。
你可以格式化bash脚本,也可以通过pre-commit钩子检查格式。
# 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 .
.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版本,以及许多编辑器插件(请参见相关项目)