シェルとRubyの組み合わせ
数年前に某案件で、ログファイルの解析処理を行った時にはShellScript(Bash)とPerlを組み合わせてやってたっけ。
今回はディレクトリ取得やコマンド実施などをShellScriptで、
文字列処理をRubyで実施するケースを想定します。
書いてみたシェルスクリプトのソースコード
args.sh
echo "hello shell"
dir=`pwd`"/args.rb"
echo "script source is"
echo $dir
echo "no args"
ruby $dir
echo "foo bar"
ruby $dir "foo" "bar"
echo "foo bar"
ruby $dir "one" "2" "san" "for"
args.rb
$ cat args.rb
p ARGV
array = [ARGV[0],ARGV[1],ARGV[2]]
p "args 1,2,3"
p array
p "each do"
i = 0;
ARGV.each do |foo|
p i
p foo
i = i + 1
end
何やっているのかというと、args.sh のほうは
1.試しに文字を表示
2.現在のディレクトリをもとに、実行するファイルのパスを取得する
3.前項で取得したパスを表示する。
4.引数なし、2つ、4つのケースに関してrubyファイルを実施する。
args.rbに関しては
1.引数の入った配列を表示する
2.引数の入った配列のうち、先頭から3つ分を配列に入れる
3.引数の入った配列に関して、要素を一つずつ表示する。
実行結果
a$ ./args.sh
hello shell
script source is
/Users/ShinichiMinoshima/Documents/rb/private/args.rb
no args
[]
"args 1,2,3"
[nil, nil, nil]
"each do"
foo bar
["foo", "bar"]
"args 1,2,3"
["foo", "bar", nil]
"each do"
0
"foo"
1
"bar"
foo bar
["one", "2", "san", "for"]
"args 1,2,3"
["one", "2", "san"]
"each do"
0
"one"
1
"2"
2
"san"
3
"for"
注意
このスクリプト、実用性は皆無です。
rubyのコンパイル処理にも時間がかかるし。
(だから、前振りですって!)