Bash 在“之间切换”|&引用;及&&&引用;基于输入的命令中的符号

Bash 在“之间切换”|&引用;及&&&引用;基于输入的命令中的符号,bash,pipe,Bash,Pipe,我正在使用bash脚本连接一系列程序的执行。这些程序中的每一个都产生一个输出,并有两个标志,可以设置为-iInputFile.txt和-oOutputFile.txt,如果未设置标志,则自动选择标准输入和输出。大多数时候,我只是将我的程序连接为 ./Program1 | ./Program2 | ./Program3 但是如果我碰巧需要将数据保存到一个文件中,然后还要从下一个文件中访问它,我需要这样做 ./Program1 | ./Program2 -oFile.txt &&

我正在使用bash脚本连接一系列程序的执行。这些程序中的每一个都产生一个输出,并有两个标志,可以设置为
-iInputFile.txt
-oOutputFile.txt
,如果未设置标志,则自动选择标准输入和输出。大多数时候,我只是将我的程序连接为

./Program1 | ./Program2 | ./Program3
但是如果我碰巧需要将数据保存到一个文件中,然后还要从下一个文件中访问它,我需要这样做

./Program1 | ./Program2 -oFile.txt && ./Program3 -iFile.txt

因此,我的问题是,是否有一种方法可以提供输入,例如
010
,并且只将脚本2和脚本3之间的符号从
|
转换为
&
,同时保持其他所有内容不变。硬编码这将是不可能的,因为我有多达12个程序连接,所以它甚至有12个!组合。这是我第一次问,如果问题中有什么不清楚的地方,我会编辑以提供所需的信息,提前谢谢大家。

如果要编写脚本,可以在管道之间的
tee
中硬编码,并使用bash的默认值参数扩展基本上关闭“写入文件”功能

./Program1 | tee ${outFile1:- /dev/null} | ./Program2 | tee ${outFile2:- /dev/null} | \
    ./Program3 | tee ${outFile3:- /dev/null}
请注意,最后一次调用
tee
可能是多余的

概念证明
管道到
三通
是否有帮助?它将stdin和输出带到文件和stdout您应该知道
a | b
a-oFile和&b-iFile
是不同的。在第一次执行之后,文件中没有存储中间结果。然而,在后一种情况下,
a的结果将被存储。你应该理解你的要求。如果可以帮助您,请检查
tee
命令。SiegeX这不是将问题转移到使用和不使用tee之间的切换吗?这些文件中有一些相当大,我不需要保存内容。肯特:是的,我的问题是,我不需要保存大部分时间,只有当我真的需要时,我才使用-o和-Iflags@User.cpp修改您的代码,这样即使给出了
-o
,它仍然会输出到stdout(基本上是复制
tee
)。然后,您可以添加一个新标志以使stdout行为静音,可能是
-n
,这与
sed
的工作方式一致。您甚至可以在代码中添加一个检查,查看arg to
-o
是否为空字符串,如果是,则忽略它。这将允许您编写脚本并将管道“硬编码”为
-o“$prog2Outfile”
,还可以选择设置或取消设置$prog2Outfile。这非常有效,只需一行!谢谢!
$ unset outFile; echo foo | tee ${outFile:- /dev/null} | cat - && cat ./tmp
foo
cat: ./tmp: No such file or directory
$ outFile=./tmp; echo foo | tee ${outFile:- /dev/null} | cat - && cat ./tmp
foo
foo