bash: Wie schreibe ich base64-codierten Inhalt in eine Datei in die angegebene Zeile

bash: Wie schreibe ich base64-codierten Inhalt in eine Datei in die angegebene Zeile

Ich arbeite an einem „Edgemax Feature-Wizard“, einer Art Plugin-System. In einem Plugin-Tarball sind nur drei Dateien zulässig: ein Bash-Skript als Backend, eine HTML-Datei als Frontend und eine Datei validation.json zur Eingabevalidierung vom Frontend. Fragen Sie also bitte nicht, warum ich die Deb-Pakete nicht einfach in den Tarball packe – sie werden ignoriert.

Ich möchte Deb-Pakete mit diesem „Assistenten“ versenden, also muss ich die Dateien base64-kodieren und in das Bash-Skript einfügen, damit sie beim Ausführen des Skripts extrahiert werden. Nun weiß ich, wie das alles geht, aber ich mache es manuell, indem ich den Base64-Teil in die Bash-Datei kopiere und dann an der richtigen Stelle ausschneide und einfüge, was beim Aktualisieren dieser Pakete auf die neueste Version unpraktisch ist.

Gibt es eine Möglichkeit, die Deb-Dateien in Base64 zu kodieren und in Zeile 65 des Bash-Skripts zu schreiben?

Ich habe gelesenDieser Artikelund ich habe es versucht

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

aber das beschwert sich mit:

bash: /bin/sed: Argument list too long

Hier ist mein Code; der Base64-Teil muss innerhalb der Anführungszeichen der Echo-Anweisung stehen:

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

Antwort1

Verwenden sedeiner E/A-Umleitung:

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

verwandte Informationen