如何将文件重定向到其他文件

时间:2016-05-16 23:37:59

标签: bash shell pipeline

我遵循两个脚本:

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"

2 个答案:

答案 0 :(得分:3)

尝试process substitution

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脚本的输入。