2009-08-26 17 views
6

セットアップを「ワンクリックデプロイメント」に近づけるため、groovyスクリプトを使用して、batスクリプトによって制御される他のプロセスを起動/停止し、ファイルシステムのさまざまな部分で実行し、別のマシンであっても。Groovyからスクリプトを実行する

これらのスクリプトを実行するにはどのようにしてそれぞれの作業ディレクトリから実行するのですか?

私はJavaの

java.lang.Runtime's exec() 

を知っている。しかしこれで問題がたくさんありますし、Groovyのは、同様にこのために速記のいくつかの種類を持っていた場合、私は疑問に思いましたか?

ありがとうございます!

答えて

11

Groovyのは、昔ながらの文字列にexecute()メソッドを追加しましたので、この試してください:あなたは「CMD/C」コマンドを前に付けた場合execute()メソッドは、ディレクトリを変更するために使用することができ

println "ls -la".execute().text 
+0

私はまだ作業ディレクトリを変更することについてよく分かりません。 –

+0

これまでのおかげで!とても好き! – raoulsson

9

をアンパサンド(Windowsと仮定)を使用してコマンドを連鎖させることができます。

例、サブディレクトリサブディレクトリに行き、そこからバッチファイルのカップルを実行したいと仮定すると:より良い方法はありません

println "cmd /c cd subdir & batch1.bat & batch2.bat".execute().text 

わからない場合は、これは作業を行います。

1

あなたはまた、Javaで導入され、驚くほどconvienent JavaクラスですProcessBuilderをを使用することができます。5.

ProcessBuilderを、プロセスがを持っている必要があり、環境どの変数

  • が決定作業ディレクトリを決定し、あなたに

    • をすることができます

    簡単な例と詳細については、http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.htmlを参照してください。

  • +0

    私はそれをもう一度。 GroovyとProcessBuilderを組み合わせた[ブログの投稿](http://www.joergm.com/2010/09/executing-shell-commands-in-groovy/) – FabienB

    0

    再利用可能なコードを作成することを恐れていない場合は、.execute()プロセスをラップするオブジェクトを作成できます。私はこのようなものを作り、それを定期的に使用します。

    を使用して新しいプロセスを作成します。

    デフPROC = "CMD" .execute()

    その後あなたが "PROC" の入力と出力を管理するための "consumeProcessOutputを()" を使用することができます。あなたがそれに送るものは、あなたがシェルに入力したかのように動作し、そのシェルのすべての出力が利用可能になります。唯一のAUTOEXEC.BATラインを表示するディスプレイを取得するには

     
    cmd("cd \\ \n dir ") { 
        if(it.contains("AUTOEXEC.BAT")) 
         println it; 
        return true; 
    } 
    

    :あなたがこれを行うことができるように

    私は閉鎖にこのすべてを包ん。クロージャからtrueを返すまで、そのプロセスの標準が利用できるので、より多くの行のテキストを送信し、無限にそれと対話することができます。

    「CD」と「ディレクトリ」は(.executeでWindowsでは動作しません)のようなコマンドは、とてもシンプルなので、私はそれをかなり使う

     
    def directoryListing=cmd("cd\\\ndir") 
    

    は私に迅速なディレクトリのリストを取得します簡単に。