当前位置: 首页 > 面试题库 >

在Java流程生成器中运行的“查找:-exec缺少参数”

司空凌
2023-03-14
问题内容

我正在尝试在Jenkins(https://jenkins-ci.org)脚本控制台中运行find命令,该控制台允许从Web界面运行groovy脚本。

我的代码是:

ProcessBuilder pb = new ProcessBuilder();
pb.directory(new File("/var/lib/jenkins/jobs/myJob");
pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
command = 'find . -name build.xml -exec echo \"{}\" \\;'
println(command)
pb.command(command.split(" "));
pb.start().waitFor();

Web UI将显示println的结果:

find . -name build.xml -exec echo "{}" \;

当詹金斯日志(/var/log/jenkins/jenkins.log)记录以下错误时:

find: missing argument to `-exec'

但是,如果我find . -name build.xml -exec echo "{}" \;通过外壳运行在Web
UI()中输出的相同命令,则不会出现此类错误。

另外,如果我替换\;witih +,则该命令有效!

所以processBuilder有点麻烦,并且\\;作为命令行参数传递


问题答案:

该错误的问题\;在于,您正在将外壳转义/引号与exec函数的参数的普通传递混合在一起。

将放到\之前;,它会起作用。 ;需要在shell中使用,因为它用于在其中分隔命令。引用同样适用-将参数传递给-
style函数时,不需要shell风格的引用/转义,因为没有shell解释它(除非您运行):\ __{}``exec*``sh -c

def command = 'find . -name build.xml -exec echo {} ;' // XXX
new ProcessBuilder()
    .directory(new File("/tmp"))
    .inheritIO()
    .command(command.split(" ")) // everything is just a list of strings
    .start()

这在groovy中基本上是相同的:

("/tmp" as File).eachFileRecurse{
    if (it.name=="build.xml") {
        println it
    }
}


 类似资料:
  • 我的数据库中有三个表。第一个是以student_id为主键的学生。第二个是以course_id为主键的课程表,最后我有一个id_student和id_course为外键的成绩表,以及一个成绩字段。我想获取成绩表中缺少成绩的学生的详细信息。我已经搜索了堆栈溢出,但找不到我正在寻找的确切答案。到目前为止,我尝试的是以下查询: 如果我在没有where条件的情况下尝试同样的查询,我会得到39行,但我应该得

  • 问题内容: 我需要在Java中执行具有特定超时的外部批处理文件。这意味着,如果批处理执行的时间比指定的超时时间长,我需要取消执行。 这是我编写的示例代码: 批处理文件“ wait.bat”是这样的: 如您在代码中看到的,批处理文件将花费25秒完成(main方法的第一行),并且Timer将在5秒后销毁命令。 这是我的代码的输出: 如您在输出中看到的,最后一行(“ Really Done …”)在第5

  • npm错误!此运行的完整日志可以在:npm err!C:\users\ttopo\appdata\roaming\npm-cache_logs\2020-11-20t07_58_40_339z-debug.log` 0信息如果它以ok结束就可以工作1详细cli[1详细cli'c:\program Files\nodejs\node.exe',1详细cli'c:\program Files\node

  • 问题内容: 给你一个包含 1 到 n 的整数数组,但数组中从 1 到 n 的数字之一丢失了。您需要提供最佳解决方案来找到丢失的数字。数组中的数字不能重复。 例如: 问题答案: 使用公式 n=n*(n+1)/2 求 n 个数字的总和 查找给定数组中存在的元素的总和。 减法(n 个数字的总和 - 数组中存在的元素的总和)。 查找数组中缺失数字的Java程序: 当你运行上面的程序时,你会得到以下输出:

  • 问题内容: 然而,从上述线程中摘录的一个重要观点是: Querydsl和jOOQ似乎是最流行和最成熟的选择,但是需要注意的一件事: 两者都依赖于代码生成的概念, 即为数据库表和字段生成元类。这有助于建立一个漂亮,干净的DSL,但是 在尝试为仅在运行时才知道的数据库创建查询时会遇到问题 。 除了仅使用纯JDBC +字符串串联外,还有什么方法可以在运行时创建查询吗? 我正在寻找的是一个Web应用程序,

  • 如何将JBoss或JBoss EAP库添加到Eclipse中项目的Java构建路径? 我的平台:带有WindowsXPSP3、JDK7和JRE7的虚拟机、面向Web开发人员的EclipseJavaEEIDE(版本:开普勒服务发行版2)、Eclipse中新的干净工作区 我所做的: 从市场上为开普勒安装了JBoss工具 文件夹与解压缩的JBoss EAP-我尝试与jboss-eap-6.2.0.zip