Я хочу использовать скрипт python3 для генерации «самораспаковывающегося» скрипта bash, который имеет встроенный архив .tar.gz в качестве полезной нагрузки.
В bash я бы просто сделал что-то вроде этого:
printf "#!/bin/bash
PAYLOAD_LINE=\`awk '/^__PAYLOAD_BELOW__/ {print NR + 1; exit 0; }' \$0\`
tail -n+\$PAYLOAD_LINE \$0 | tar -xvz
#script that does something with the unpacked payload
exit 0
__PAYLOAD_BELOW__\n" > "tmpfile"
cat "tmpfile" "payload.tar.gz" > "myscript.sh"
В Python я попробовал следующее:
with open('myscript.sh','wb') as script:
for line in open(payload.tar.gz, 'rb'):
script.write(line)
Я могу распаковать полученный файл вручную с помощью cat myscript.sh | tar -xvz
Чтобы добавить часть сценария bash (PAYLOAD_LINE= .... __PAYLOAD_BELOW__\n"
), есть ли более элегантный способ, чем открыть myscript.sh
во второй раз, но не в двоичном ('wb'
) режиме?