我遵循两个脚本:
A.sh
B.sh
A.sh如下:
#!/bin/bash
some/path/ 2>/dev/null -jar some/path/java.jar "$1"
我们假设A.sh将输入视为:
$ A.sh "some script"
我们将其重定向到某个输出:
$ A.sh "some script" > output.txt
让我们假设B.sh将文件(file.txt)作为输入并处理它:
$ B.sh "file.txt"
现在,我需要一个可以将output.txt传递给B.sh的脚本。可以在单个脚本中执行以下操作的东西吗? (是否有可能这样做?如果没有,任何解决方案?)
$ A.sh "some script" > output.txt
$ B.sh "output.txt"
答案 0 :(得分:3)
B.sh <(A.sh "some script")
<(...)
是流程替换。它使A.sh
的输出可用作B.sh
作为类文件对象。只要B.sh
进行简单的顺序读取,这就可以工作。
这需要bash
或其他高级shell。 POSIX不需要进程替换,因此像dash这样的简单shell不支持。
来自man bash
:
流程替换支持流程替换 支持命名管道(FIFO)或/ dev / fd方法的系统 命名打开文件。它采用&lt;(list)或&gt;(list)的形式。该 进程列表运行时其输入或输出连接到FIFO或 / dev / fd中的一些文件。该文件的名称作为参数传递 作为扩展的结果,当前命令。如果&gt;(列表) 使用表单,写入文件将提供列表输入。如果 使用&lt;(list)表单,作为参数传递的文件应该是 读取以获取列表的输出。
如果可用,则同时执行过程替换 参数和变量扩展,命令替换和 算术扩展。
答案 1 :(得分:1)
您可以在运行两个命令之间使用tee命令来捕获第一个命令的输出。
实施例: -
A.sh "some script" | tee output.txt | B.sh
A.sh脚本输出的输出存储在output.txt文件中,并且传递给B.sh脚本的输入。