SHC(Shell Script Compiler)を使ってみた
ソースコード隠して簡単なスクリプトを書くことになり、
どうしようかと思ってググってたらSHC
というシェルスクリプト用のコンパイラを見つけたので
さっそく試してみた。
シェルスクリプトをCのコードに変換して、バイナリ化してくれるみたい。
- 環境
CentOS release 6.5 (Final) x86-64
ここからダウンロード
wget https://github.com/neurobin/shc/archive/release.tar.gz
インストール
tar zxvf release.tar.gz cd shc-release ./configure make make install
実行方法
- まずスクリプト準備
$ vim shc_test.sh
#!/bin/sh echo "test shc"
- コンパイルする
$ shc -v -f shc_test.sh -o /data/tmp/shc_test.x shc shll=sh shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc shc_test.sh.x.c -o /data/tmp/shc_test.x shc: strip /data/tmp/shc_test.x shc: chmod ug=rwx,o=rx /data/tmp/shc_test.x -f シェルスクリプトを指定する -o 出力先を指定する -v 進行状況出力
Cのファイルが作成され、指定した先にバイナリファイルが作成される
$ ls shc_test.sh shc_test.sh.x.c $ ls /data/tmp/ shc_test.x
実行してみる
$ ./shc_test.x test shc
ちょっとはまったこと
rpmforgeからyumでshcを落とすこともできるが、バージョンが古いため64bitOSに対応してなかったみたい。
$ yum list available | grep shc shc.x86_64 3.8.6-1.el6.rf rpmforge
このバージョンでshcを実行するとキャストのエラーが出力される。
$ shc -v -f shc_test.sh shc shll=sh shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc shc_test.sh.x.c -o shc_test.sh.x shc_test.sh.x.c: In function 'chkenv': shc_test.sh.x.c:210: warning: cast from pointer to integer of different size shc: strip shc_test.sh.x shc: chmod go-r shc_test.sh.x
実行ファイルを実行すると、正常にできることもあれば以下になったりするので注意。
使用する場合は最新版のほうがいいみたい。
$ ./shc_test.sh.x ./shc_test.sh.x: has expired! Please contact your provider
- 最新バージョンここで確認できる