我正在尝试从groovy中使用shell命令< code > notify-send-t 2000 " Title " " Message " ,以下一种方式< code > " notify-send-t 2000 \ " Title \ " \ " Message \ "。execute()就可以完美地工作了。但是当我试图用表达代替信息时,似乎什么都不管用。下面是代码片段:
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 May 06 13:41:43 CEST 2016 groovy.lang.MissingPropertyException: no suchic: execute for class: dummy at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:51) at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:295) at DUMMY$_closure1.doCall(DUMMY.groovy:1) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) atorg.codehaus.groovy.runtime.metaclass.ClosureMetaMethod.invoke(ClosureMetaMethod.java:81) at groovy.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)'
这个问题似乎主要与字符串格式和将“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()
无论如何,谢谢大家。
您需要预先将命令声明为变量,然后执行该命令。
你可以这样做:
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()
因此,当参数中有空格时,就会出现问题。
例如,这将不起作用:
def command = "send_mail.sh \"Some text\""
command.execute();
send_mail.sh
将收到2个参数而不是1。
因此,为了避免问题,通过参数拆分字符串。所以像这样:
def command = ["send_mail.sh", "Some text"];
command.execute();
第一项(0索引)是命令,然后是参数。
2. Shell如何执行命令 2.1. 执行交互式命令 用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程。以前学过的cd、alias、umask、exit等命令即是内建命令,凡是用which命令查不到程序文件所在位置的命令都是内建命令,内建命令没有单独的man手册,要在man手册
问题内容: 在我的我确定,我可以在命令行后使用的功能: 使用此命令时,仅在远程主机上执行该命令。该命令在本地主机上执行。这是因为分号将两个不同的命令分开:命令和命令。 我尝试如下定义函数(注意单引号): 我试图将命令和命令放在一起,但是参数解析不取决于我给函数的内容。总是试图执行命令 在远程主机上。 如何正确定义,所以剧本正在改变进入目录后,在远程主机上执行,具有传递给参数的能力来? 问题答案:
问题内容: 我正在寻找在Go中执行shell命令,并在程序中以字符串形式获取结果输出。我看到了Rosetta Code 版本: 但这并不能以我可以通过编程方式访问的方式捕获实际的标准或错误-那些仍会打印到常规的stdout / stderr。我看到使用Pipe作为out或err可以在其他地方提供帮助,但是没有如何执行此操作的示例。有任何想法吗? 问题答案: 该答案不代表Go标准库的当前状态。请查看
问题内容: 我试图找出Linux上是否存在程序,并且找到了本文。我尝试从go程序中执行此操作,但它始终提示我无法在$ PATH中找到“命令”,这是预料之中的,因为它是Linux中的内置命令,而不是二进制文件。所以我的问题是如何从go程序中执行linux的内置命令? 错误:执行:“命令”:在$ PATH中找不到可执行文件 问题答案: 就像那篇文章说的那样,“命令”是内置的shell。您可以通过go本
问题内容: 我需要接受命令行参数才能以以下格式运行Go程序: 我正在使用。但是它只接受到‘1-‘。’> A’被跳过。 非常感谢您对解决此问题的任何帮助。 谢谢 问题答案: 您的外壳将IO 重定向解释为IO 重定向。Shell打开该文件作为命令的标准输出,并将参数传递给命令。 引用参数以避免这种情况:
软件级别: 詹金斯2.121.2 我正在使用Freestyle项目(不是管道),并希望使用Groovy命令构建步骤进行作业的主要处理。 我试图从用户凭据获取用户ID和密码,以便groovy脚本可以将其用于各种CLI操作。我花了很多时间寻找答案,但我发现没有一个有效。大多数情况尚不清楚,许多是针对管道的。 我将非常感谢在这一点上提供一些指导。 以下是血淋淋的细节。 我创建了一个新的参数化自由式项目,