首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“(tee -a .)”Bash中的命令

“(tee -a .)”Bash中的命令
EN

Stack Overflow用户
提问于 2015-03-11 16:27:11
回答 2查看 1.1K关注 0票数 3

我有一个运行Scala测试代码的Bash代码:

代码语言:javascript
复制
scripts=(
Hello.scala
)

for script in "${scripts[@]}"; do
    echo scala "${script}"
    scala -nocompdaemon "${script}" > >(tee -a _testoutput.txt) \
        2> >(tee -a _testerrors.txt >&2)
done

我如何解释>(tee -a _testoutput.txt)?我通常使用| (管道)来使用T形三通。使用这个表达式有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-11 16:31:24

在这种情况下,我相信> >(tee -a _testoutput.txt)| tee -a _testoutput.txt的行为是一样的。

标准误差版本显然是必要的,因为没有标准的错误管道。

管道版本和https://en.wikipedia.org/wiki/Process_substitution (>(...))版本的另一个主要区别是子subshell的发生位置。

例如,如果>(...)处于整个循环中,并且需要在循环中设置变量以在循环之外持久存在,则不能使用管道版本(有关这方面的更多信息,请参见Bash FAQ 24 )。

另外一个不同之处(正确地说是查尔斯·达菲指出 )是,管道会影响管道的退出状态(默认情况下,您将获得管道中最终命令的退出状态,尽管set -o pipefail更改了这些状态,而Bash PIPESTATUS数组保存了所有退出状态)。另一方面,进程替换不影响退出状态。

票数 4
EN

Stack Overflow用户

发布于 2015-03-11 16:32:13

>( list )被称为“进程替换”。它比普通管道更强大:您不能这么容易地使用|将标准输出和标准错误重定向到不同的程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28992111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档