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

将stdout作为命令行util的文件名传递?

徐俊楚
2023-03-14
问题内容

我正在使用命令行实用程序,该实用程序需要传递文件名以将输出写入例如

foo -o output.txt

它写入的唯一内容stdout是一条消息,指示其已成功运行。我希望能够将写入output.txt到另一个命令行实用程序的所有内容通过管道传输。我的动机是output.txt最终将是一个40
GB的文件,不需要保留,我宁愿通过管道传输流,也不能以逐步的方式处理大量文件。

在这种情况下,有什么方法可以将实际输出(即output.txt)传递给另一个命令?我能以某种方式神奇地通过stdoutfile参数吗?


问题答案:

解决方案1:使用流程替代

最方便的方法是使用进程替换。在bash中,语法如下所示:

foo -o >(other_command)

(请注意,这是一种bashism。对于其他shell,也有类似的解决方案,但最重要的是,它不可移植。)

解决方案2:显式使用命名管道

您可以按以下步骤明确/手动执行上述操作:

  1. 使用mkfifo命令创建命名管道。

    mkfifo my_buf
    
  2. 使用该文件作为输入启动您的其他命令

    other_command < my_buf
    
  3. 执行foo并将其写入输出my_buf

    foo -o my_buf
    

解决方案3:使用 /dev/stdout

您还可以/dev/stdout如下使用设备文件

foo -o /dev/stdout | other_command


 类似资料:
  • 问题内容: 如果我在每行上都有一个带有单独命令的文本文件,我将如何使终端将每行作为命令运行?我只是不想一次复制和粘贴1行。它不必是文本文件,而可以是任何可以使用的文件。 : 问题答案: 您可以使用这些命令创建一个shell脚本,然后创建,然后通过运行 编写bash脚本非常简单 样机sh文件:

  • 问题内容: 我在Jenkins的命令行中使用字符串参数触发构建: 我现在想从命令行触发使用文件作为文件参数的构建。 例如,如果我的项目构建了main.c,那么我希望能够触发构建并从命令行上传main.c。 这可能吗? 问题答案: 在“ Jenkins远程访问 API”页面中对此进行了描述: 请注意,您需要使用URL / build代替/ buildWithParameters

  • 问题内容: 如何接收文件作为命令行参数? 问题答案: 仅传递文件的路径,在程序内部使用Java File类处理它 这将第一个参数作为文件路径:

  • 问题内容: 我正在尝试编写一个使用pdftk应用程序的PHP脚本,以将XFDF与PDF表单合并,然后将合并的PDF输出给用户。根据pdftk文档,我可以通过传递表单数据,并将PDF输出到流中。从命令行使用pdftk的通常的,非文件非流方式是: 要在命令行上使用流,请输入: 我有几个问题: 1)我已经得到pdftk,通过使用xfdf文件(而不是)返回输出,如下所示: 但是,根据Adobe Reade

  • 问题内容: 说,我有一个文件指定参数 我需要传递给命令 如何使用文件的行作为命令的参数? 问题答案: 如果您的shell是bash(以及其他东西),则其的快捷方式是,因此您应编写: 在“命令替换”部分的bash手册页中记录。 或者,从stdin中读取命令,因此:

  • 下面的代码无法写入文件。 我编写了一个程序来执行cmd中的命令。这些命令只是执行jar文件中的java文件。这个jar中的java文件需要文件路径作为命令行参数。 注意:-jar文件也仅由我创建。