Selbstextrahierende Skript in sh-shell
Wie würde ich mich über ein selbstextrahierendes Archiv, die ausgeführt werden können, die auf sh
?
Der nächste, den ich habe, ist:
extract_archive () {
printf '<archive_contents>' | tar -C "$extract_dir" -xvf -
}
Wo <archive_contents>
enthält einen tarball mit null-Zeichen, %
, '
und \
Zeichen und Text zwischen einfachen Anführungszeichen.
Gibt es einen besseren Weg, dies zu tun, so dass keine Flucht erforderlich ist?
(Bitte nicht zeigen Sie mir shar
, makeself
etc. Ich will schreiben Sie ihn neu.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alternative Variante ist die Verwendung von marker für das Ende der shell-Skript und sed benutzen, um cut-out-shell-Skript selbst.
Skript
selfextract.sh
:Wie zu verwenden:
Da shell-Skripte werden nicht kompiliert, sondern Anweisung für Anweisung ausgeführt, können Sie mischen binäre und text-Inhalte mit einem Muster, wie dies (ungetestet):
Können Sie fügen Sie diese beiden Zeilen an die Spitze von so ziemlich jedem tar+gzip-Datei, um es selbstentpackendes.
Test:
END_OF_SCRIPT
und das Ende des Skripts undsed -e '1,/END_'OF_SCRIPT/ "$0"
(beachten Sie, dass die sed-Befehl muss nicht enthalten die marker wahrsten Sinne des Wortes - deshalb "unangebracht" nennen). Dies beseitigt die Notwendigkeit der Anpassung der end-Adresse, wenn die Anzahl der Zeilen im Skript ändert.sed
und ähnliche Programme sind oft gierig, aber es stellt sich heraussed
ist nicht gierig in diesem Fall, so kann es verwendet werden.Einige gute Artikel darüber, wie man genau das tun konnte gefunden werden: