2016-05-06 11 views
2

次のようにgroovyのシェルコマンドnotify-send -t 2000 "Title" "Message"を使用しようとしています"notify-send -t 2000 \"Title\" \"Message\"".execute()と完璧に動作します。 しかし、メッセージの代わりにexprsessionを入れようとしているときは、何も動作していないようです。ここ は以下の壊れたコードです:groovyのパラメータでshellコマンドを実行するには?

def todayDate = new Date() 

def title = 'Title' 
def message = " Message ${todayDate}" 
println(title + message) 
"notify-send -t 2000 \"${title}\" \"${message}\"".execute() 

あなたは理解した上で私を助けることができますか? '127.0.0.1:40305'、輸送: 'ソケット' TitleFri 5月6日夜01時41分43秒は、CEST 2016 groovy.lang.MissingPropertyException:いいえ、そのようなプロパティ:実行ターゲットVM、アドレスに接続

クラスの:ORGでorg.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49) でorg.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrapでDUMMY (ScriptBytecodeAdapter.java:51) 。 codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:295) DUMMY $ _closure1.doCall(DUMMY.groovy:1) at sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ:java.lang.reflect.Method.invokeでsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) (Method.javaでsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) における方法) 4935) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod.invoke(ClosureMetaMethod.java:81) at groovy.lang。 MetaMethod.doMethodInvoke(MetaMethod.java:324)groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1208)で groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1111)で groovy.lang.MetaClassImplで 。 invokeMethod(MetaClassImpl.java:1017) a t test.notification.run(notification.groovy:28) '

+1

エラーメッセージはありますか? –

+1

'/ notify-send -t 2000" $ {message} "/。execute()'また、 'toString()'を呼び出す必要はありません。 'on message。しかし、これらはちょうどあなたがあなたが働くべきであると言っている飾りです...出力をキャプチャし、それが何を言うかを表示 –

+0

申し訳ありませんが、出力はありません。それは大丈夫だが、テキストを含むべき通知ウィンドウなし。ここで期待される結果を見ることができます。[画像](https://drive.google.com/file/d/0B3xY1NHSe3DoazVTUDRaQmlYbVU/view?usp=sharing) – delovepr

答えて

1

事前に変数として宣言してからコマンドを実行する必要があります。

あなたはこのようにそれを行うことができます。

def todayDate = new Date().toString() 
def title = 'Title' 
def message = " Message ${todayDate.toString()}".toString() 
println(title + message) 
def command = "notify-send -t 2000 \"${title}\" \"${message}\"" 
command.execute() 
1

この問題は、1つの文字列(引数)として書式設定文字列と誤解「メッセージ2016年5月9日」に主に関連していたようです。 私にとって、それは次のように動作します:とにかく

def command = new String[3] 
command[0] = "notify-send" 
command[1] = "Title" 
command[2] = "\"Message ${todayDate}.toString()\"".toString() 
def process = new ProcessBuilder(command).start() 

、すべての人に感謝を。

関連する問題