help-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Official bash minifier


From: Peng Yu
Subject: Re: Official bash minifier
Date: Sun, 7 Feb 2021 16:47:45 -0600

This seems to be a good start. But it is still far from a true
minifier, as variable names are not shortened, which is a key feature
of a minifier.

> Have you tried any of these minifiers you found by the Google search?
> Do these minifiers all fail with your scripts?
>
> I think the most robust way is to let Bash parse the file and print
> the code by `eval "content(){$filecontent}"; declare -pf content'. I'm
> not sure if there is already such a one. I attach an example to do
> that (minify.sh). You can use it like `./minify.sh
> ScriptFileToMinify'. This safely removes comments and empty lines in a
> robust way such that e.g. here documents are not broken, but it adds
> redundant indentation.
>
> [ Note: I think there is still some cases that the above method can
> break the script, e.g., scripts using aliases to change its syntactic
> structure, but I don't think there are so many such scripts, and I
> don't think any other minifiers can handle such scripts. ]
>
> If you want to remove indentation also, I think you can patch Bash not
> to indent the result of `declare -pf`:
>
> ----------
>
> diff --git a/print_cmd.c b/print_cmd.c
> index 3c8c2d8f..2cde982b 100644
> --- a/print_cmd.c
> +++ b/print_cmd.c
> @@ -1446,14 +1446,7 @@ static void
>  indent (amount)
>       int amount;
>  {
> -  register int i;
> -
> -  RESIZE_MALLOCED_BUFFER (indentation_string, 0, amount, indentation_size,
> 16);
> -
> -  for (i = 0; amount > 0; amount--)
> -    indentation_string[i++] = ' ';
> -  indentation_string[i] = '\0';
> -  cprintf ("%s", indentation_string);
> +  (void) amount;
>  }
>
>  static void
>
> ----------
>
> Then, run minify.sh with the patched Bash:
>
>   $ bash-noindent minify.sh FileToMinify
>
> where `bash-noindent' is the patched Bash. You can also play around
> `print_cmd.c' to further reduce spaces by replacing `" && "' with
> `"&&"', `" "' with `""`, etc.
>
> --
> Koichi
>


-- 
Regards,
Peng



reply via email to

[Prev in Thread] Current Thread [Next in Thread]