Самораспаковывающийся shell-скрипт
This site is under construction.

version: 2.1.0

C Новым Годом!

mode: 

Самораспаковывающийся shell-скрипт

В этой статье описывается создание само-распаковывающегося shell скрипта в unix подобных операционных системах

logo.webp

Роаботая роаботу на роаботе

ДПоставлена зоадача была мне

ШЧтоб можно было Linux'ы настроить

И шчтобы все ну просто, прям ваообще.


Задача есть, надо исполнять, ага думаю, просто - ну ОК, значит это должен быть всего один файл и чтобы прям клац по нему и все, ГОТОВО! Ага, думаю ну окей, будет вам кнопка "зделать все зае[CENSORED]" Насяльника.

Итак создаваем начинать:

(PS: задача довольно таки тривиальная, но чтобы самому не забыть, да и вам подсказать, приходится все записывать):

Имеется несколько файлов с настройками, которые необходимо скопировать в каталог пользователя и потом провести еще какие-то манипуляции. То есть надо написать такой скрипт который будет брать файлы и копировать их куда нужно, стоп но это уже куча файлов, а нам надо один. Значит надо создать самораспаковывающийся SFX (SelF-eXtractable) скрипт содержащий в себе архив который после запуска будет распаковываться и потом производить какие-то еще дополнительные манипуляции.

Первое что нужно сделать - это создать архив с нужными файлами.

tar czf имя_архива.tar.gz папка

далее создадим скрипт script.sh который будет распаковывать и производить нужные нам манипуляции.

#!/bin/bash
echo "Распаковка архива..."
SKIP=`awk '/^__TARFILE__/ { print NR + 1; exit 0; }' $0`
THIS=`pwd`/$0
tail -n +$SKIP $THIS | tar -xz
echo "Файлы извлечены."
# здесь можно прописать выполнение еще каких-то комманд
exit 0
# Строка ниже ДОЛЖНА БЫТЬ ПОСЛЕДНЕЙ в скрипте!!!
__TARFILE__

И последнее что необходимо сделать - это обьеденить скрипт с архивом .tar.gz и сделать его исполняемым.

cat script.sh archive.tar.gz > installer.sh
chmod +x installer.sh

Ну вот и все, для запуска получившегося инсталлятора нужно в терминале выполнить комманду:

./installer.sh

Надеюсь эта статься была кому нибудь полезна и спасибо за внимание.