Shell into Binary
This site is under construction.

version: 2.1.0

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

mode: 

Shell into Binary

Или компиляция Shell-скрипта в исполняемый бинарный код.

logo.webp

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! =)

Работает!

Спасибо, удачи и тд.