2013-09-11 21 views
0

我有一个bash脚本,执行以下操作。后台进程和输出到文件

spinner() 
{ 
    local pid=$1 
    local delay=0.75 
    local spinstr='\|/-' 
    while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do 
     local temp=${spinstr#?} 
     printf " [%c] " "$spinstr" 
     local spinstr=$temp${spinstr%"$temp"} 
     sleep $delay 
     printf "\b\b\b\b\b\b" 
    done 
    printf " \b\b\b\b" 
} 

printf "Testing for timestamps,please wait..." | tee test_report.txt 

(process_1 -f $FILENAME test_1 >> test_report.txt 2>&1)& 
spinner $! 

printf "\n" 

printf "Testing for accurate seq numbers,please wait..." | tee test_report.txt 

(process_2 -f $FILENAME sequence >> test_report.txt 2>&1) & 
spinner $! 
printf "\n"; 

然而,当我打开test_report.txt我只看到'process_2'输出并不能看到的'process_1'

输出我想真正的问题是发生了什么,它包含一个输出文件后台进程的标准输出。

+3

顺便说一下,'kill -0 $ pid'是一个安全,很好的方法来检查一个PID是否仍然活动。它实际上并没有表明过程。 – ash

回答

4

tee test_report.txt正在覆盖它。尝试tee -a test_report.txt