2013-11-22 113 views
0

我目前有一堆安裝程序腳本,它們將stderr/stdout記錄到日誌文件中,效果很好,但我還需要爲用戶重定向stdin對同一個日誌文件的響應。安裝腳本有時會在共享庫(一個包含)中調用函數,該函數也可以讀取用戶輸入。我想添加一個自定義閱讀功能,但這將需要更改共享庫,並想知道是否有方法從調用腳本執行此操作。Bash:如何將stdin,stdout和stderr重定向到安裝日誌的日誌文件

目前的腳本與此類似:

#!/usr/bin/bash 

. ./libInstall 

INSTALL_LOG="./install.log" 
((

echo "INFO: Installing..." 
# Run some arbitrary commands... 
# Read some input... 
read ANSWER1 
read ANSWER2 
# Call function in libInstall which will prompt the user... 
funcWhichAsksAQuestion ANSWER3 

echo "INFO: Installation Complete" 

) 2>&1) | tee -a "${INSTALL_LOG}" 

如果我改變「((」反映了線下,我可以標準輸入開球到日誌文件:

貓 - 2 >/dev/null | tee -a $ {INSTALL_LOG} |((

這可以工作,但需要2次回車,一旦腳本結束,大概是因爲管道損壞了 這幾乎就在那裏,但我會努力工作而不必在最後按兩次輸入回到t他的shell提示符。

這些腳本必須相當可移植才能在RHEL> = 5,AIX> = 5.1,Solaris> = 9上工作,我相信最低bash版本是v2.05。

任何想法,我可以如何實現這一點?

感謝

+1

你不能將'stdin'重定向到一個文件。你可以從文件中重定向'stdin'。 – anishsane

+0

同意,這就是爲什麼我試圖在將它傳遞給腳本之前將其啓動到文件中。我可能會最終實現一個自定義的「讀取」功能,但我希望避免這種情況。乾杯 –

回答

0

爲什麼不添加 '回聲 「\ n \ n」' 後您的 「安裝完成」 路線?當然,你的日誌文件中會有兩條額外的行,但這些行看起來相對無害。

我相信你必須返回兩次,因爲如何實施tee。它自己「使用」一個回報,另外兩個來自「讀取」調用(好,一個讀取,一個funcWhichAsksAQuestion)。

相關問題