簡體   English   中英

如何在groovy中使用參數執行shell命令?

[英]How to execute shell command with parameters in groovy?

我試圖使用shell命令notify-send -t 2000 "Title" "Message"從groovy接下來"notify-send -t 2000 \\"Title\\" \\"Message\\"".execute()它完美地工作。 但是,當我試圖用exprsession代替消息時,它似乎沒有用。 這里是破碎的代碼:

def todayDate = new Date()

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

你能幫我理解嗎?

連接到目標VM,地址:'127.0.0.1:40305',傳輸:'socket'TitleFri May 06 13:41:43 CEST 2016 groovy.lang.MissingPropertyException:沒有這樣的屬性:執行類:DUMMY at org.codehaus .groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:51)org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49)at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty (AbstractCallSite.java:295)位於太陽下的sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)中的DUMMY $ _closure1.doCall(DUMMY.groovy:1)。在org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)上的java.lang.reflect.Method.invoke(Method.java:497)中反映.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) groov的.codehaus.groovy.runtime.metaclass.ClosureMetaMethod.invoke(ClosureMetaMethod.java:81) y.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1208)at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1111)at groovy.lang.MetaClassImpl .invokeMethod(MetaClassImpl.java:1017)at test.notification.run(notification.groovy:28)'

您需要事先將該命令聲明為變量,然后執行該命令。

你可以這樣做:

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()

似乎這個問題主要與字符串格式化和誤解“消息9 2016年5月”作為一個字符串(參數)有關。 對我而言,它的工作原理如下:

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

無論如何,感謝大家。

因此,當您的參數中有空格時會出現問題。

因此,例如,這將不起作用

def command = "send_mail.sh \"Some text\""
command.execute();

send_mail.sh將接收2個參數而不是1個。

所以為了避免問題通過參數分割你的字符串。 所以像這樣:

def command = ["send_mail.sh", "Some text"];
command.execute();

第一項(0索引)是一個命令,然后參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM