2017-07-05 17 views
0

私は、wiremockというJavaアプリケーションプロセスを停止するSBTタスクを作成しようとしています。SBT ProcessCommandを使用したパイプ出力

lazy val `stop-wiremock` = taskKey[Unit]("Stop the wiremock server") 
    lazy val stopWireMockTask = `stop-wiremock` in Performance := { 
    "kill $(ps ux | grep [w]iremock | awk '{print $2}')".! 
    } 

残念ながら、これは出力になり:

> stop-wiremock 
kill: illegal process id: $(ps 
kill: illegal process id: ux 
kill: illegal process id: | 
kill: illegal process id: grep 
kill: illegal process id: [w]iremock 
kill: illegal process id: | 
kill: illegal process id: awk 
kill: illegal process id: '{print 
kill: illegal process id: $2}') 

私はプロセスビルダーがここに舞台裏で何をしているのか知らないが、これは動作しないとthe documentationoperators際に使用するために私に指示

lazy val `get-wiremock-pid` = taskKey[Unit]("Stop the wiremock server") 
    lazy val getWiremockPidTask = `get-wiremock-pid` in Performance := { 
    "ps ux" #| "grep [w]iremock" #| "awk '{print $2}'" ! 
    } 

今誤差は次のとおりです:

私のコマンドを構築するので、私は次のことを試してみました
> get-wiremock-pid 
awk: syntax error at source line 1 
context is 
    >>> ' <<< 
    missing } 
awk: bailing out at source line 1 

これは、プロセスビルダーが引数を空白のawkに分割しているため、awk '{printしか受信できないが、これを修正する方法がわかりません。

ProcessBuilder演算子を使用してこれを行うのに役立つ人はいますか?また、完全なコマンドを実行する方法を提案する人はいますか?どうもありがとうございました。

答えて

1

プロセスは、最初の文字列がコマンドで残りの文字列がパラメータである一連の文字列から作成できます。あなたの場合はそれがなります

("ps ux" #| "grep [w]iremock" #| Process(Seq("awk", "{print $2}"))) ! 
関連する問題