Появилась необходимость, скомпилировать bash скрипт в бинарный исполняемый файл. Смысл и цели этих манипуляций каждый может найти себе сам, вдруг понадобится.
Нашелся такой проект
]]>http://www.datsi.fi.upm.es/~frosal/]]>, некоего Francisco Javier Rosales García. Утилита называется shc, транслятор языка bash в C, с последующей компиляцией в двоичный формат.
Все манипуляции производим на виртуальной машине с debian 8 jessie на борту.
Скачиваем архив, разархивируем, компилируем:
root@debian8:~ # wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
root@debian8:~ # tar -xzf ./shc-3.8.9b.tgz
root@debian8:~ # cd shc-3.8.9b
root@debian8:~/shc-3.8.9b # make
cc -Wall shc.c -o shc
*** ▒Do you want to probe shc with a test script?
*** Please try... make test
Собственно инструмент готов, можно использовать.
Использование shc
Список возможных опций:
root@debian8:~/shc-3.8.9b # ./shc -help
shc Version 3.8.9b, Generic Script Compiler
shc Copyright (c) 1994-2015 Francisco Rosales
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
-e %s Expiration date in dd/mm/yyyy format [none]
-m %s Message to display upon expiration ["Please contact your provider"]
-f %s File name of the script to compile
-i %s Inline option for the shell interpreter i.e: -e
-x %s eXec command, as a printf format i.e: exec('%s',@ARGV);
-l %s Last shell option i.e: --
-r Relax security. Make a redistributable binary
-v Verbose compilation
-D Switch ON debug exec calls [OFF]
-T Allow binary to be traceable [no]
-C Display license and exit
-A Display abstract and exit
-h Display help and exit
Environment variables used:
Name Default Usage
CC cc C compiler command
CFLAGS C compiler flags
Please consult the shc(1) man page.
Для проверки накидаем скрипт script.sh в пару строк:
#!/bin/bash
echo $1
Скрипт просто выводит строку, переданную ему в качестве параметра
root@debian8:~/shc-3.8.9b # ./script.sh testing
testing
Теперь скомпилируем бинарный файл.
root@debian8:~/shc-3.8.9b # ./shc -r -T -f ./script.sh
На выходе получаем 2 новых файла:
script.sh.x - двоичный исполняемый файл
script.sh.x.c - С код полученный из bash скрипта, при желании его можно подправить руками и скомпилировать штатными средствами системы.
Проверяем бинарник:
root@debian8:~/shc-3.8.9b # ./script.sh.x "binary file"
binary file
Использовать полученный бинарник можно практически на любой версии linux. Скрипту можно установить срок годности (опция -e), по истечение которого файл будет выдавать сообщение (опция -m).