2015-12-03 89 views
0

我在运行脚本时遇到了一些麻烦。当脚本成功时,我无法获得输出重定向。我需要将它传递给/ dev/null,因为我真的不关心它。重定向bas​​h输出

if ! p4 -p 1667 -c prefetch -Zproxyload sync //bob/...; then 
    printf "\nFailed to Sync //bob \n\n" &> $OUTPUT_LOG 
else &>/dev/null 
fi 

我在做什么错?

+0

'&>'不是一个单独的命令,您可以从对“p4”的调用中抽象出来;它是命令调用语法的一部分。 – chepner

回答

3

在运行命令之前,您必须决定在输出之前要对输出进行什么操作。如果您希望在出现问题时保留输出到日志文件中,但在没有问题时放弃输出,则需要保存输出,决定是否出现问题,然后处理。

保存输出(标准输出和标准错误)是指将其放入文件或变量中。这里,一个变量可能是合适的。

output=$(p4 -p 1667 -c prefetch -Zproxyload sync //bob/... 2>&1) 
if [ $? != 0 ] 
then 
    { 
    echo "$output" 
    printf "\nFailed to Sync //bob\n\n" 
    } > $OUTPUT_LOG 
fi 

另一种方法,使用的文件,可能会更好,如果输出可以是极其丰富的,但它更复杂,以确保文件被正确命名(见mktemp)和复杂得多,以确保即使脚本被中断,文件也会被正确删除(请参阅trap)。