Tag: tee

bash:将stdout和stderrredirect(并追加)到文件和terminal,并获得正确的退出状态

为了将stdout和stderrredirect(并追加)到一个文件,同时也在terminal上显示它,我这样做: command 2>&1 | tee -a file.txt 但是,有没有另外一种方法来获得退出状态的准确值? 也就是说,如果我testing$? ,我想看看command的退出状态,而不是退出状态。 我知道我可以使用${PIPESTATUS[0]}而不是$? ,但我正在寻找另一个不涉及检查PIPESTATUS解决scheme。

Linux发球区不使用Python?

我做了一个python脚本,使用无限循环与Web服务器通信。 我想将每个通讯数据logging到一个文件中,并同时从terminal监控它们。 所以我用这样的tee命令。 python client.py | tee logfile 然而,我从terminal和日志文件没有得到什么。 python脚本工作正常。 这里发生了什么? 我错过了什么? 一些build议将不胜感激。 先谢谢你。

bash:将stdout捕获到一个variables,但仍然显示在控制台中

我有一个bash脚本,它调用几个长时间运行的进程。 我想将这些调用的输出捕获到variables中,以便处理。 但是,由于这些是长时间运行的进程,所以我希望将rsync调用的输出实时显示在控制台中,而不是事后。 为此,我已经find了一种方法,但它依赖于将文本输出到/ dev / stderr。 我觉得输出到/ dev / stderr不是做事的好方法。 VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr) VAR2=$(rsync -r -t –out-format='%n%L' –delete -s /path/source1/ /path/target1 | tee /dev/stderr) VAR3=$(rsync -r -t –out-format='%n%L' –delete -s /path/source2/ /path/target2 | tee /dev/stderr) 在上面的例子中,我调用rsync几次,我想看看他们处理的文件名,但最后我仍然希望在一个variables的输出,因为我会稍后parsing它。 是否有一个“更干净”的方式来完成这个? 如果它有所作为,我使用Ubuntu 12.04,bash 4.2.24。

pipe道命令输出到tee,但也保存命令的退出代码

我有一个shell脚本,其中我包装一个命令(mvn干净安装),将输出redirect到日志文件。 #!/bin/bash … mvn clean install $@ | tee $logfile echo $? # Does not show the return code of mvn clean install 现在,如果mvn clean install失败并出现错误,我希望我的包装shell脚本也失败并出现该错误。 但是因为我把所有的输出pipe道都连接起来了,所以当我访问$?时,我无法访问mvn clean install的返回码$? 之后,它总是0(因为发球成功)。 我试图让命令写错误输出到一个单独的文件,然后检查,但错误输出mvn总是空的(好像只写入标准输出)。 我怎样才能保持mvn clean install的返回码,但仍然输出到一个日志文件?

pipe道到三通时,强制标准输出缓冲

通常, stdout是行缓冲的。 换句话说,只要你的printf参数以一个换行符结束,你可以期望行被立即打印。 这在使用pipe道redirect到tee时似乎不成立。 我有一个C ++程序, a输出string,总是\n terminated,到stdout 。 当它自己运行( ./a )时,正如所期望的那样,所有东西都可以正确打印。 但是,如果我将它input到tee ( ./a | tee output.txt )中,它将不会打印任何东西,直到退出为止,这会破坏使用tee的目的。 我知道我可以通过在C ++程序中的每个打印操作之后添加一个fflush(stdout)来修复它。 但是,有没有更简单,更简单的方法? 是否有一个命令我可以运行,例如,即使在使用pipe道时强迫stdout被行缓冲?

显示Windows命令提示符输出并将其redirect到文件

如何在Windows命令提示符下运行命令行应用程序,并使输出同时显示并redirect到文件? 例如,如果我要运行命令dir > test.txt ,则会将输出redirect到名为test.txt的文件,而不显示结果。 我怎么能写一个命令来显示输出和redirect输出到Windows命令提示符下的文件,类似于Unix上的tee命令?

在Bash中管道输出和捕获退出状态

我想在Bash中执行一个长时间的运行命令,并且捕获它的退出状态,并且开始输出。 所以我这样做: command | tee out.txt ST=$? 问题在于变量ST捕获了tee的退出状态而不是命令。 我该如何解决这个问题? 请注意,命令是长时间运行,并将输出重定向到一个文件,稍后查看它不是一个好的解决方案。