LoginSignup
3
2

More than 5 years have passed since last update.

ShellScript再起動中 シェルスクリプト からRubyを呼び出す

Posted at

シェルと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のコンパイル処理にも時間がかかるし。
(だから、前振りですって!)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2