2016-07-29 59 views
-3

我试图将标准输出& stderr存储到$ log和$ script_log中。 $ log包含所有其他使用的进程日志>> $ script_log只需要从set_flag.sh和update.sh中记录日志。在bash中没有完全重定向标准输出

set_flag.sh 2>&1 >> $log | tee -a $log > $script_log 
update.sh 2>&1 >> $log | tee -a $log >> $script_log 

$ log很好。我可以看到来自set_flag.sh和update.sh的所有进程日志,但不知何故$ script_log有来自set_flag的日志,但来自update.sh的部分日志。 不知道为什么....

任何人都可以解释和帮助我吗?

感谢,

+0

为什么要写入$ log?为什么不只是'script | tee> $ script_log'? T恤已经为你分裂了。没有必要缓存到一个文件,从该文件读取发球,只写出另一个文件。 –

+0

@MarcB'tee'从标准输入读取,所有传递的文件参数都是输出文件。 – Siguza

+1

这就是说,由于输入重定向是在管道之前完成的,所以我不知道'tee'怎么能接收任何输入。 – Siguza

回答

0

我相信你想标准输出&标准错误set_flag.shupdate.sh$log$script_log

如果是这样的话,重定向脚本输出到$logcreate a symlink名称为$script_log,使这一点你$log

这样,您可以节省磁盘空间[无重复文件]并保持$log$script_log完全相同。

1

这是做你想做的吗?

set_flag.sh 2>&1 | tee $script_log >>$log 
update.sh 2>&1 | tee -a $script_log >>$log 

$log存在于你的命令两次,这可能是不需要您发布的问题(所有标准输出+标准错误到$log,只有标准输出+标准错误set_flag.shupdate.sh$script_log)。

+0

这就是我在想管道stderr和stdout到'tee'并让它处理分裂记录和script_log。 – JNevill