bash: base64로 인코딩된 콘텐츠를 파일의 지정된 줄에 쓰는 방법

bash: base64로 인코딩된 콘텐츠를 파일의 지정된 줄에 쓰는 방법

저는 플러그인 시스템인 "edgemax 기능 마법사"를 개발 중입니다. 플러그인 tarball에는 세 개의 파일만 허용됩니다: 백엔드로 bash 스크립트, 프론트엔드로 HTML 파일, 프론트엔드 입력 검증을 위한 유효성 검사.json 파일이므로 왜 deb만 넣지 않는지 묻지 마세요. 패키지를 tarball에 넣으십시오 - 무시됩니다.

이 "마법사"를 사용하여 deb 패키지를 보내고 싶으므로 파일을 Base64로 인코딩하고 bash 스크립트에 넣어 스크립트가 실행될 때 추출할 수 있도록 해야 합니다. 이제 이 모든 작업을 수행하는 방법을 알고 있지만 base64 부분을 bash 파일에 복사하여 붙여넣은 다음 올바른 위치에 잘라내어 붙여넣는 방식으로 수동으로 수행합니다. 이는 이러한 패키지를 최신 버전으로 업데이트할 때 불편합니다.

deb 파일을 base64로 인코딩하여 bash 스크립트의 65행에 쓸 수 있습니까?

나는 읽었다이 기사나는 전에 시도했다

sed -i "65i\\$(base64 package.deb)" wizard-run

그러나 이것은 다음에 대해 불평합니다.

bash: /bin/sed: Argument list too long

내 코드는 다음과 같습니다. base64 부분은 echo 문의 큰따옴표 안에 있어야 합니다.

if [ $arch == 'mips' ]; then
    # base64: olsrd_0.9.0.3-1_mips.deb
    echo "
    <base64encoded-pkg>
    " | base64 -d > $cfgusrdir/olsrd_0.9.0.3-1_mips.deb
    # base64: olsrd-plugins_0.9.0.3-1_mips.deb
    echo "
    <base64encoded-pkg>
    " | base64 -d > $cfgusrdir/olsrd-plugins_0.9.0.3-1_mips.deb
fi

답변1

사용법 sed및 I/O 리디렉션:

{
  sed -n '1,64p' wizard-run;
  base64 package.deb;
  sed -n '66,$p' wizard-run;
} > wizard-run.tmp && mv wizard-run.tmp wizard-run

관련 정보