shell脚本缩小工具类似于jsMin等人?

时间:2011-08-23 14:15:49

标签: bash shell minify

我想压缩一些shell代码,以便在具有有限闪存的嵌入式Linux平台上进行部署

显然,您可以尝试使用正则表达式来搜索空白,但唯一安全的方法是使用完整的解析器。

shell脚本语言是否有任何缩小工具(类似于jsMin和YUI Compressor)?

特别是我对灰壳感兴趣,但我接受了一些关于bash的东西:)

1 个答案:

答案 0 :(得分:1)

除非你有大量的评论(相对容易删除)并删除了不重要的行(和空白行)上的前导空格,否则没有太多的压缩要做。

我对我多年来编写的424个各种shell脚本进行了粗略测试,有16561个输入行(386008个字符)和11992个输出行(278349个字符)。因此,储蓄率约为28%。

我使用了这个几乎无关紧要的Perl脚本(它在任何意义上都没有被优化;它最初是为每个输入文件写入一个单独的输出文件 - 因此显式文件处理而不是简单的while (<>)循环):

#!/usr/bin/env perl
use strict;
use warnings;

foreach my $file (@ARGV)
{
    open my $fh, "<", $file or die "Failed to open $file";
    my $line = <>;
    print $line;
    while ($line = <>)
    {
        next if $line =~ m/^#/;
        next if $line =~ m/^\s*$/;
        $line =~ s/^\s+//;
        $line =~ s/\s+$//;
        print $line;
    }
    close $fh;
}

这留下了第一行(通常是shebang行,尽管我的许多脚本足够老 - 并且长时间无法使用 - 他们使用:而不是shebang)不变。这不会尝试去除尾随注释(空格,哈希,其他字符),但我不倾向于使用其中许多注释。添加替换命令:

        $line =~ s/\s+#[^\\'"`]*$//;

从我的语料库中留下了275035个字符(节省了大约29%)。用“#!/bin/sh”替换所有第一行可以节省更多。大约700行中有多个连续的空格或制表符,但压缩它们的额外空间相当有限(其中许多正在搜索“空白或制表符”组合,不应压缩)。

显然,如果节省大约1/3的空间就足够了,那么这个脚本可能会有一些用处,尽管它很简单。但是,减少空间会很困难,但不会造成损坏正在最小化的脚本的严重风险。