From: "尾川敏也" Date: 2013-08-11T11:14:07+09:00 Subject: [ruby-list:49538] Re: コマンドラインで ruby の変数に値を設定する方法 尾川です。 リプライありがとうございました。 古川さん wrote: >> スクリプト名に続く, `-'で始まる引数を解釈して, 同名のグローバル >> 変数に値を設定します。 > > #! /bin/ruby -s > print "x is #{$x}\n" if $x > > こういうプログラムに対して > > $ ruby test.rb -x=2 > x is 2 -s オプションというのはこのように使えるのですね。気付きませんでした。 大変勉強になりました。 その後、スクリプトをファイルに書くのではなく、-e でコマンドラインに 直接書く場合にまた少し躓いたのですが、何とか解決しました。 ruby -s -e 'print "x is #{$x}\n" if $x' -- -x=2 これでうまく行きました。 私の気持ちとしては -x=2 という「オプション」を指定しているのですが、 ruby に対してはコマンドラインオプションとしてではなく、ファイル名等 の一般の引数として扱うよう、-- でコマンドラインオプションの解析を止 めてやる必要があるのですね。 *** ちなみに、その場で本当にコマンドラインにタイプして使うのなら、わざ わざそんなことをしなくてもスクリプトの中で x=2 と書いてしまえばよい のですが、私が本当にしたかったのは、既存のフィルタプログラムと組み 合わせてシェルスクリプトの中で使うことでした。 イメージ的に書くと、myprog1, myprog2 を既存のフィルタプログラムとし て: -------------------------------------- #!/bin/sh datafile=$1 param=$2 cat $datafile |\ myprog1 |\ ruby -s -wnla -e ' # # param の値を使う # それなりのボリュームの # ruby スクリプト # ' -- -param=$param |\ myprog2 -------------------------------------- みたいな感じです。 これまでは上記の ruby -s の部分を awk -v で処理していたのですが、 最近一念発起して勉強し始めた ruby に少しでも多く触れられるように、 日常的に使ってきた awk を ruby に置き換えようとしているところです。 ともあれ、アドバイス頂き、ありがとうございました。 -- 尾川敏也 ogw@shizuokanet.ne.jp http://www6.shizuokanet.ne.jp/ogw/