2016-03-25 38 views
0

我有腳本,將推出一個子shell /背景命令來讀取輸入,然後做更多的工作:閱讀使用內建命令從標準輸入父讀取,而在子shell

#!/bin/bash 

(
while true; do 
    read -u 0 -r -e -p "test_rl> " line || break 
    echo "line: ${line}" 
done 
) & 

sleep 3600 # more work 

通過以上我不甚至得到一個提示。如果我在啓動子shell之前,然後從描述符3(-u 3)讀取,那麼我至少會得到提示,但是讀取命令仍然沒有得到我輸入的任何輸入。

如何從終端(父級的標準輸入文件描述符)正確讀取內置讀取內容?

+0

請張貼完整的例子 – aless80

+3

後臺進程不允許從終端閱讀。 – Barmar

+1

'man bash'中的查找合作進程 – cdarke

回答

1

我如何內建從終端 (父母的標準輸入文件描述符)正確讀取讀?

你可能想試試這個(使用父母的filedescriptors):

#!/bin/bash 

(
while true; do 
    read -u 0 -r -e -p "test_rl> " line || break 
    echo "line: ${line}" 
done 
)<&0 >&1 & 

sleep 3600 # more work 
+0

downvote的原因是什麼? – thom

+0

工作,謝謝。我不知道爲什麼有人給你一個downvote。 – kanaka

+0

我可以用一個函數做同樣的事嗎?你能否解釋你在做什麼?你將'stdin'和'stdout'從父進程重定向到子shell? – unfa