java获取标准输出到文件_如何将输出重定向到文件和标准输出

在bash中,调用foo将在stdout上显示该命令的所有输出。

调用foo > output会将该命令的所有输出重定向到指定的文件(在本例中为“ output”)。

有没有一种方法可以将输出重定向到文件并在stdout上显示?

#1楼

您可以主要使用Zoredache 解决方案 ,但是如果您不想覆盖输出文件,则应使用-a选项编写tee,如下所示:

ls -lR / | tee -a output.file

#2楼

对我有用的另一种方法是

|& tee

例:

ls |& tee files.txt

如果使用'|&',则command1的标准错误 (除了其标准输出 )还通过管道连接到command2的标准输入; 它是2>&1 |的简写 。 将标准错误隐式重定向到标准输出是在命令指定的任何重定向之后执行的。

有关更多信息,请参考重定向

#3楼

补充一下...

软件包解缓冲在fedora和redhat UNIX发行版中对某些软件包有支持问题。

排除烦恼

以下对我有用

bash myscript.sh 2>&1 | tee output.log

谢谢ScDF和马修,您的输入为我节省了很多时间。

#4楼

奖励答案,因为此用例将我带到了这里:

如果您需要以其他用户身份执行此操作

echo "some output" | sudo -u some_user tee /some/path/some_file

请注意,回声会发生在你和文件写入会发生的“some_user”究竟会不会工作,如果你要运行回声为“some_user”,并与输出重定向>>“SOME_FILE”,因为文件重定向会发生和你一样

提示:tee还支持带有-a标志的append,如果您需要以其他用户的身份替换文件中的一行,则可以以所需用户的身份执行sed。

#5楼

您想要的命令名为

foo | tee output.file

例如,如果您只关心标准输出:

ls -a | tee output.file

如果要包括stderr,请执行以下操作:

program [arguments...] 2>&1 | tee outfile

2>&1将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将两者都写为stdout。 从tee命令开始,它也被定向到给定的输出文件。

此外,如果要追加到日志文件,请使用tee -a作为:

program [arguments...] 2>&1 | tee -a outfile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值