kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

SHC(Shell Script Compiler)を使ってみた

ソースコード隠して簡単なスクリプトを書くことになり、
どうしようかと思ってググってたらSHCというシェルスクリプト用のコンパイラを見つけたので
さっそく試してみた。

シェルスクリプトをCのコードに変換して、バイナリ化してくれるみたい。

  • 環境
CentOS release 6.5 (Final) x86-64

ここからダウンロード

neurobin.org

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
  • 最新バージョンここで確認できる

Shc the shell script compiler - Wikipedia