重定向bas​​h输出

时间:2015-12-03 15:29:18

标签: bash

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

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

我做错了什么?

1 个答案:

答案 0 :(得分: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)。