2015-12-03 136 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)。