2011-08-23 2 views
1

제한된 플래시 메모리가있는 임베디드 리눅스 플랫폼에서 일부 쉘 코드를 압축하고 싶습니다.쉘 스크립트 축소 도구는 jsMin 외에도 비슷합니까?

분명히 공백을 검색하기 위해 정규식을 사용하여 일을 시도 할 수는 있지만 그럴 수있는 유일한 방법은 다음과 같습니다. 전체 파서.

쉘 스크립팅 언어 용 축소 도구 (jsMin 및 YUI Compressor와 유사)가 있습니까?

은 특히 나는 재 쉘에 관심이 있어요,하지만 난 배쉬 : 당신이 라인 (비교적 쉽게 제거된다) 풍부한 의견과 제거 선행 공백이 없다면

답변

1

는 그것이 뭔가를 받아 들일 것 중요하지 않은 (그리고 빈 줄), 그다지 할 압축이별로 없습니다.

지난 몇 년 동안 작성한 424 개의 쉘 스크립트에 대한 원유 테스트를 수행했으며 16561 입력 줄 (386008 자) 및 11992 출력 줄 (278349 자)이있었습니다. 따라서 저축률은 약 28 %였다.

나는이 거의 사소한 펄 스크립트 사용 (어떤 의미에서 최적화되지 않은, 원래 입력 파일마다 별도의 출력 파일에 쓸 거라고 - 따라서 간단한 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; 
} 

(내 스크립트의 대부분은 나이가 비록 일반적으로 오두막 라인 - 충분한 시간과 돌보지 - 그들은 대신 오두막의 :를 사용)이 첫 선을 잎 변경. 이것은 후행 주석 (공백, 해시, 다른 문자)을 제거하려고하지는 않지만 그 중 많은 것을 사용하지는 않습니다. 대체 명령 추가 :

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

내 자료에서 275035 자 (약 29 % 절약)가 남았습니다. 모든 첫 번째 행을 '#!/bin/sh'으로 바꾸면 조금 더 절약됩니다. 약 700 개의 줄에 여러 개의 연속 된 공백 또는 탭이 있지만 압축을 저장하는 추가 공간이 제한되어 있습니다 (많은 경우 공백 또는 탭 조합을 압축하지 않아야 함).

분명히 약 1/3 공간 절약이면 충분하지만이 스크립트는 단순하지만 사용하기 쉽습니다. 공간을 훨씬 더 줄이는 것은 어렵지만, 최소화하고있는 스크립트를 손상시킬 수있는 심각한 위험을 감수하지 않아도됩니다.

+0

고마워요! 어떤 통계를 가지고 있어도 좋습니다. :) – Lethargy

+0

장치에는 8MB의 플래시 메모리 만 있고 OpenWRT가 실행됩니다. 나는 이것을 생각해보기 전에 사용자 정의 된 이미지를 만들기 위해 기울어 져있다. – Lethargy

+0

생각해 보니 : 스크립트가 압축 파일에 저장되고 쉘 (또는 쉘용 래퍼)이 스크립트를 실행하기 전에 임시 파일로 압축을 풀어 볼 수 있습니까? 그러나 디스크 공간의 조각화를 조사해야합니다. 쉘 스크립트는 개별적으로 작은 경향이 있습니다. –