WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート ShellScript

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

スクリプトはなんでもいいのですが、試していたのがjmeterなのでそのままサンプルを出します。


/bin/sh /home/admin/apache-jmeter-2.10/bin/jmeter -n -Jlogname="/tmp/jmeter.log" -Jdomain="www.example.com" -t /home/admin/jmeter/sample.jmx
このコマンドは問題なく動くとします。でこれを動的に実行します。jmeter.shを下記のように書いてこれを実行

#!/bin/sh
cmd="/bin/sh /home/admin/apache-jmeter-2.10/bin/jmeter -n -Jlogname=\"/tmp/jmeter.log\" -Jdomain=\"www.example.com\" -t /home/admin/jmeter/sample.jmx"
$cmd

./jmeter.sh

Created the tree successfully using /home/admin/jmeter/sample.jmx
Starting the test @ Tue Dec 17 14:08:26 JST 2013 (1387256906227)
Waiting for possible shutdown message on port 4445
Tidying up ... @ Tue Dec 17 14:08:26 JST 2013 (1387256906790)
... end of run
動いたようにみえるのですが実は引数がうまくわたっていません。実行先のスクリプト「/home/admin/apache-jmeter-2.10/bin/jmeter」では引数がクオート記号付きで解釈されそのまま処理されます。つまり上記の例だとjmeterに渡されるJdomainは「www.example.com」ではなく「"www.example.com"」が渡されて「http://"www.example.com"」にアクセスを試みようとしています。

クオート記号を引数に持つコマンドを動的に実行するには「eval」を使います。

#!/bin/sh
cmd="/bin/sh /home/admin/apache-jmeter-2.10/bin/jmeter -n -Jlogname=\"/tmp/jmeter.log\" -Jdomain=\"www.example.com\" -t /home/admin/jmeter/sample.jmx"
eval $cmd
当たり前ですが渡された物はそのまま実行されますので、不特定多数が値を渡せる場所に使う場合は注意して下さい。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。