Mac OS Xのコンソールからシェルスクリプトを使ってディレクトリをループさせながら複数のJavaのプログラムを実行する方法
目次
この記事を書いた背景
顧客対応の関係で、複数の Java プログラムをチェックする必要があり、個数が多いので手動は嫌だというのが理由です。
環境が Mac OS X だったので、シェルスクリプト(.sh)ファイルをコンソールで実行しようと思ったのですが、パッケージ指定が必要になったときに for を使ってディレクトリを繰り返して指定する方法がすぐわからなかったので、メモしておきます。
参考:Windows のコマンドプロンプト(cmd)でディレクトリに対して for を使う方法
作成したシェルスクリプト
最終的に作ったスクリプトは次のようなものです。
#!/bin/sh
for dirname in `ls -d e*`
do
echo
echo "+++"$dirname"+++"
cd $dirname"/bin"
java -Dfile.encoding=UTF-8 < packagename >.< classname > < arguments >
cd ../../
done
以下、本シェルスクリプトについての解説です。
「`」で囲む
「`」で囲うことによって、シェルに実行させた結果をスクリプト内で受け取る事ができます。
「ls -d e*」と言うのは、「e」で始まるファイル・ディレクトリのうち、「-d」でディレクトリのみを対象にして、「ls」で一覧にした結果を受け取ります。
今回は全てのプロジェクトが「e」で始まるようにしたのでこのように書きました。
for の変数名
for の直後の単語は、for ループ内で使える変数名となります。
for ループ中で使う場合、「$」を接頭辞とすることで変数として扱われます。
今回の場合、echo や cd するときに使っている「$dirname」が変数です。
文字コード指定
「java -Dfile.encoding=UTF-8」は、「java」実行時にファイルのエンコードが「UTF-8」であることを指定するオプションです。
パッケージ名付きで Java クラスファイルを指定
Java クラスファイルをコマンドラインで実行する場合には、実行している現在パスから見て「パッケージ名.クラス名」と指定しなければいけません。
ディレクトリ=パッケージ名なので、「< packagename >.< classname >」のように「.」を挟んで指定し、引数があれば「< arguments >」に渡せば良い、としました。
今回の案件は様々なテストパターンをコマンドラインから渡さないとならないので、複数行実行のコマンドが並ぶ漢字ですね。
実行方法
シェルスクリプトは「ターミナル」で動かす必要があります。
Spotlight などで「ターミナル」を起動しましょう。
また、シェルスクリプトには実行権限が必要です。
次の様に「chmod」コマンドを使って権限を付加しておきましょう。
$ chmod 755 < スクリプト名 >
まとめ
前に Windows で動くバッチファイルを作りましたが、やはりこういった繰り返し作業はできる限り手動は省いた方が良いですね。
10年集客し続けられるサイトを、ワードプレスで自作する9つのポイント プレゼント
あなたは、24時間365日、自分の代わりに集客し続けてくれるWebサイトを作りたい!と思ったことはありませんか?
私はこれまで500以上のWebサイトの構築と運営のご相談に乗ってきましたが、Webサイトを作ってもうまく集客できない人には、ある一つの特徴があります。
それは、「先を見越してサイトを構築していないこと」です。
Webサイトで集客するためには、構築ではなく「どう運用するか」が重要です。
しかし、重要なポイントを知らずにサイトを自分で構築したり、業者に頼んで作ってもらってしまうと、あとから全く集客に向いていないサイトになっていたということがよく起こります。
そこで今回、期間限定で
『10年集客し続けられるサイトをワードプレスで自作する9つのポイント』
について、過去に相談に乗ってきた具体的な失敗事例と成功事例を元にしてお伝えします。
・ワードプレスを使いこなせるコツを知りたい!
・自分にピッタリのサーバーを撰びたい!
・無料ブログとの違いを知りたい!
・あとで悔しくならない初期設定をしておきたい!
・プラグイン選びの方法を知っておきたい!
・SEO対策をワードプレスで行うポイントを知りたい!
・自分でデザインできる方法を知りたい!
という方は今すぐ無料でダウンロードしてください。
期間限定で、無料公開しています。
※登録後に表示される利用条件に沿ってご利用ください