Shell into Binary
Или компиляция Shell-скрипта в исполняемый бинарный код.
TL;DR или прелюдии
Как-то раз, однажды, в дни "весеннего равноденствия", не конспирации для, а для улучшения производительности зрел-назревал у меня вопрос "А можно ли, и если можно, то как скомпилировать shell-скрипт into binary? " Я конечно тогда решил эту задачу и был бесконечно счастлив, но c течением времени (у меня тогда еще не было привычки все записывать) взял да и забыл основательно. И вот опять...
Внезапно при написании очередного проекта в поисках оптимального решения, мне вдруг ударило в голову мыслью о том, что надо откомпилировать скрипты в исполняемый файл, тысызыть - "дабы сэкономить и оптимизировать runtime". Так вот, дабы и впредь не забыть, да и рассказать тем, кто не это и не знает как это делать я и решился на написание этой статьи.
Итак погнали...
Установка необходимого, а именно SHC.
Короче тут все просто, все что нужно - это установить компилятор SHC - shell script compiler.
Айнц. Установка в macOS:
homebrew
:
brew install shc
macports
:
sudo port install shc
Цвей. Установка Ubuntu/Debian:
sudo add-apt-repository ppa:neurobin/ppa
sudo apt update
sudo apt install shc
Дрей. CentOS/Fedora
sudo yum install shc
Пользователи Windows извиняйте идете лесом потому-что #виндекапец. PS: Хотя WSL вам в помощь.
Поставили! Идем дальше...
Создаем shell-скрипт script.sh
:
#!/bin/bash
echo -n "Введите свое имя: "
read name
echo -e "\nПривет $name!"
now=$(date +"%A %d %B, %Y %H:%M:%S")
echo -e "\nСегодня: $now"
echo -e "\n Have Fun! =)"
Делаем его исполняемым и запускаем:
chmod +x ~/script.sh
./script.sh
Введите свое имя: Сергей
Привет Сергей!
Сегодня: Wednesday 20 September, 2023 00:31:31
Have Fun! =)
Смотрим информацию о файле script.sh
file script.sh
script.sh: Bourne-Again shell script text executable, UTF-8 Unicode text
Компилируем
shc -vrf script.sh -o script
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc script.sh.x.c -o script
shc: strip script
shc: chmod ug=rwx,o=rx script
Проверяем
ls |grep script
script
script.sh
script.sh.x.c
Смотрим информацию о файле script
file script
script: Mach-O 64-bit executable x86_64
Ну ни ежа себе <censored> Получилось!
PS: На Linux системах информация будет что-то типа ELF 64-bit LSB executable, x86-64
бла бла бла.
Крч запускаем файл script
и радуемся !
./script
Введите свое имя: Ктулху
Привет Ктулху!
Сегодня: Wednesday 20 September, 2023 00:46:19
Have Fun! =)
Работает!
Спасибо, удачи и тд.