
저는 일종의 플러그인 시스템인 "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