2016-05-02 44 views
6

腳本,輸出如下:tee命令無法正常運行(與讀取和echo)

腳本:

#!/bin/bash 
#tee_with_read.sh 
function tee_test() 
{ 
    echo "***This should be printed first but it is not***" 
    read -r -p "Enter input : " 
    echo "You entered : $REPLY" 
} 
tee_test | tee -a logfile 

輸出:

$ ./tee_with_read.sh 
Enter input : ***This should be printed first, but it is not*** 
"My Input" 
You entered : "My Input" 

我想追加輸出到日誌文件。 但是正如你在輸出中看到的那樣,它看起來像是第一次讀取得到執行,然後回聲這不是預期的。

我在Windows 10上使用Git Bash版本3.1.23。 由於命名管道在此版本中不可用,因此我無法使用命名管道進行日誌記錄。

+2

'read'顯示在標準錯誤的提示。你的'echo'顯示在stdout上。 – bishop

回答

9

read -p正在將其輸出到stderrecho正在致函stdoutstdout通常是緩衝的,而stderr不是,所以在stdout之前看到stderr的情況並不罕見。

你可以有你的echo也去stderr如果你喜歡做echo "string" >&2或者你可以在unbuffer命令或類似的工具來運行它,如果你讓他們提供

+0

我明白了。所以我也可以寫'回聲'***這應該先打印,現在它會***「; echo -n「Enter Input:」;讀-r; '得到預期的結果。 – ss005

+0

正確的,因爲那麼所有的東西都會轉到'stdout',並且會在流中排序(也就是'stdout',這就是'tee'在你的用例中所期待的) –

+0

或者,只是另一個替代'tee_test 2>&1 | tee -a logfile'感謝Renouf :) – ss005