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

使用Java ProcessBuilder执行管道命令

齐英耀
2023-03-14

我试图使用Java的ProcessBuilder类来执行包含管道的命令。例如:

ls -l | grep foo

然而,我得到了一个错误:

ls: |: no such file or directory

然后:

ls: grep: no such file or directory

尽管该命令在命令行中运行得很好,但我无法让ProcessBuilder执行将其输出重定向到另一个的命令。

有没有办法做到这一点?

共有2个答案

於功
2023-03-14

最简单的方法是以命令行作为参数调用shell。毕竟,正是shell将“|”解释为“在两个进程之间传输数据”。

或者,您可以单独启动每个进程,并从“ls-l”的标准输出中读取数据,将数据写入示例中的标准输入“grep”。

韦原
2023-03-14

这应该行得通:

ProcessBuilder b = new ProcessBuilder("/bin/sh", "-c", "ls -l| grep foo");

要执行管道,您必须调用一个shell,然后在该shell中运行您的命令。

 类似资料:
  • 问题内容: 我想知道是否有一种方法可以在Go中运行一定的时间,然后在从通道接收到值后将其杀死。在似乎不支持命令管道。谢谢。 问题答案: 这是我的管道示例,通过OS Std Pipe归档一个调用文件b,您可以对其进行编辑并添加计时器以执行所需的操作。 文件b:

  • 本文向大家介绍CMD命令行管道命令使用介绍,包括了CMD命令行管道命令使用介绍的使用技巧和注意事项,需要的朋友参考一下 一、什么是管道命令   管道命令能够将一个命令的执行结果经过筛选,只保留我们需要的信息。   如 dir 命令会显示目录下所有文件夹和文件,可以使用管道命令| findstr "" 将dir的结果进行筛选,只保留需要的信息 | 命令管道符 格式:第一条命令 | 第二条命令 [|

  • 问题内容: 我有一种情况想要在Python中执行以下shell命令并获取输出, 我可以使用此python代码在python中执行上述shell命令, 但是,由于我 不想使用“ shell = True”选项 ,因此我尝试了以下python代码, 我想知道为什么我参考网页中的描述时输出为“ None”:http : //docs.python.org/library/subprocess.html#

  • 问题内容: 是否可以在管道常规脚本中直接调用PowerShell命令?在Jenkins中使用自定义作业时,我可以使用PowerShell插件调用该命令。但是在groovy脚本中没有片段可以使用它。 我也尝试过,但似乎此命令不允许在命令中包含多行和注释。 问题答案: 要从Groovy脚本调用PowerShell脚本,请执行以下操作: 您必须使用命令。 之后,您必须确保正确返回错误代码()变量(应导致

  • 问题内容: 您是否知道如何在内部执行AWS CLI命令以构建管道?我没有找到任何插件 问题答案: 首先,您需要在服务器上安装aws cli,并确保jenkins用户有权运行它。 或者在创建EC2实例时简单地使用Amazon AMI,它附带了aws cli。 使用适当的策略为角色分配实例。(在aws configure中使用用户密钥更简单) 在管道步骤中使用

  • 我用ProcessBuilder写了一个java程序来启动CMD提示符 控制台中的输出: SQL*Plus:2015年1月19日星期一14:07:53发布11.2.0.3.0 版权所有(c)1982、2011,Oracle。保留所有权利。 连接到:Oracle Database 11g Enterprise Edition 11.2.0.3.0版-64位生产,包括分区、Oracle标签安全、OLA