bash: base64로 인코딩된 콘텐츠를 파일의 지정된 줄에 어떻게 쓰나요?

bash: base64로 인코딩된 콘텐츠를 파일의 지정된 줄에 어떻게 쓰나요?

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

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

base64로 deb 파일을 인코딩하고 이를 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

관련 정보