2016-03-25 40 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