I'm looking for something similiar to indent but for (bash) scripts. Console only, no colorizing, etc.
Do you know of one ?
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
A bit late to the party, but it looks like shfmt could do the trick for you.
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.
Found this http://www.linux-kheops.com/doc/perl/perl-aubert/fmt.script .
Very nice, only one thing i took out is the [...]->test substitution.
来源:https://stackoverflow.com/questions/3987382/pretty-print-for-shell-script