当前位置: 首页 > 知识库问答 >
问题:

从groovy脚本执行命令时,命令无法正常工作

颛孙沈义
2023-03-14

IM 创建一个 groovy 脚本,用于从 docker 容器执行 SQL 脚本。这是我要执行的命令

docker exec -i wienerberger_generalshale_com mysql -u root -proot -r < 001_CategorySamples.sql  generalshale_website

当我从终端执行它时,它是有效的,但是当我调用我的groovy脚本来执行那一行时,我得到一个mysql帮助,就像命令不正确一样。

这就是我从groovy执行命令的方式:

def command =  "docker exec -i wienerberger_generalshale_com mysql -u root -proot -r < 001_CategorySamples.sql  generalshale_website"
def proc = command.execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream .toString());

有人知道为什么结果不一样或者为什么命令无法识别吗?

共有1个答案

魏襦宗
2023-03-14

当从终端直接调用时,sql文件的重定向由操作系统shell处理,而不是由正在执行的命令(在您的情况下是docker)处理。你必须自己处理。类似于:

def infile = '001_CategorySamples.sql'
def command = 'docker exec -i wienerberger_generalshale_com mysql -u root -proot -r generalshale_website'
def proc = command.execute()
Thread.start{
    def writer = new PrintWriter(new BufferedOutputStream(proc.out))
    writer << new File(infile).text
    writer.close()
}
def outputStream = new StringBuffer()
proc.waitForProcessOutput(outputStream, System.err)
println outputStream

你可以找到类似的问题要求Java:

  • 使用从 Java 重定向的 stdin 和 stdout 运行外部程序
  • 流程需要重定向输入

或者查看这个 PLEAC(Perl 食谱翻译)页面,了解一些类似的 Groovy 场景的示例:

  • http://pleac.sourceforge.net/pleac_groovy/processmanagementetc.html
 类似资料:
  • 我想在詹金斯中强制执行以下场景: 我有工作A和工作B 我想在执行作业B时禁用作业A,在执行作业B后,我想再次启用作业A。 为了启用/禁用作业A,我使用了Groovy插件:Groovy插件 Groovy插件提供了两种可能性:执行Groovy脚本和执行系统Groovy脚本。 在开始执行作业B时,我添加了以下代码片段: 执行工作B后: 当我运行作业B时,它失败了,出现以下异常: 当我运行作业B时,它失败

  • 我正在使用脚本模式(一种groovy脚本)与Katalon Studio创建一个测试用例。我需要那个groovy脚本来执行将位于Katalon项目文件夹中。 出于测试目的,我创建了一个. jar,它创建了一个名为"the-file-name"的文件,并在控制台中打印一条消息。 我找到了在Groovy中执行命令的方法: 这会在Katalon控制台中打印git的版本。所以我猜放上“java-jar t

  • 问题内容: 如何通过外壳程序脚本执行SQL命令,以使其自动化? 我想使用外壳程序脚本恢复在SQL文件中收集的数据。我想连接到服务器并还原数据。通过SSH命令行单独执行时,该命令有效。 这是我使用的命令: 这是创建文件并将其通过管道传递到mysql 的Shell脚本代码。 正确的方法是什么? 问题答案: 您需要使用该标志来发送密码。这很棘手,因为您和密码之间必须没有空格。 如果在空格之后使mysql

  • 当我试图登录本地postgres数据库并提交查询时,我的BASH脚本中的psql命令遇到了问题。我以以下方式使用该命令: 但是,我收到以下错误消息。 PSQL: FATAL:用户"postgres"的身份验证失败 在我将以下更改附加到 /var/lib/pgsql/data/pg_hba.conf后,从命令行运行非常好: 本地所有信任 托管所有127.0.0.1/32信任 另外,能否验证一下这一点

  • 在我的Windows 10机器上安装postgres后,我很难更改与postgres用户关联的密码。我提前道歉,因为我对postgres以及使用它所需的命令非常陌生。 我在下面的文章中引用了批准的答案:致命:用户“postgres”的密码验证失败(postgresql 11和pgAdmin 4) 我被困在台阶上,需要我 我不太明白这一步。我已经采取了以下步骤 打开cmd 运行psql 然后系统向我

  • 我刚开始使用hibernate,并尝试在oracle DB中映射已经创建的表。在下面给定的代码中: 然后成功显示所需的结果。但我想知道例外的原因。寻求帮助。我只知道一些关于hibenate的事情,如果这是一个愚蠢的问题,对不起。 是数据库的名称。这是我的映射: