shell 脚本的漂亮打印

发布于 2024-09-28 14:36:07 字数 131 浏览 3 评论 0原文

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

您知道其中之一吗?

I'm looking for something similiar to indent but for (bash) scripts. Console only, no colorizing, etc.

Do you know of one ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

海之角 2024-10-05 14:36:07

Vim 可以缩进 bash 脚本。但在缩进之前不要重新格式化它们。
备份 bash 脚本,用 vim 打开它,输入 gg=GZZ ,缩进将被纠正。 (不耐烦的人请注意:这会覆盖文件,因此请务必进行备份!)

不过,<< 存在一些错误(期望 EOF 作为一行中的第一个字符)例如编辑

:ZZ 不是 ZQ

Vim can indent bash scripts. But not reformat them before indenting.
Backup your bash script, open it with vim, type gg=GZZ and indent will be corrected. (Note for the impatient: this overwrites the file, so be sure to do that backup!)

Though, some bugs with << (expecting EOF as first character on a line) e.g.

EDIT: ZZ not ZQ

冷弦 2024-10-05 14:36:07

bash5+ 有一个 --pretty-print 选项..它会删除注释,包括第一行 '#!/bin...'

bash5+ has a --pretty-print option.. it will remove comments though, including a first-line '#!/bin...'

迷你仙 2024-10-05 14:36:07

在 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 way”。

如果你的脚本中有 HEREDOCS,它们就会被前面函数中的 sed 破坏。

所以使用:

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

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

或者你可以这样做:

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/    /"
}

它也可以处理heredocs。

In bash I do this:

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

this eliminates comments and reindents the script "bash way".

If you have HEREDOCS in your script, they got ruined by the sed in the previous function.

So use:

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

But all your script will have a 4 spaces indentation.

Or you can do:

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 takes care also of heredocs.

方圜几里 2024-10-05 14:36:07

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 .

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

由于它是用 go 编写的,因此您只需下载适用于大多数平台的二进制文件,例如 Travis (.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 版本和许多编辑器插件 (请参阅相关项目

shfmt works very well.

You can format bash scripts and also check the formatting from pre-commit hooks.

# 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 .

The only option absent is that it does not reformat according to line length (yet).

Since it is written in go you can just download the binary for most platforms, e.g. for Travis (.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 .

There is also a cross compiled js version on npm and a lot of editor plugins (see related projects)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文