2016-03-25 3 views
0

У меня есть скрипт, который запускает команду подоболочка/фона для чтения ввода, а затем делать больше работы:Используйте встроенную команду чтения для чтения из родительского стандартного ввода в субоболочке

#!/bin/bash 

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

sleep 3600 # more work 

С выше, я не даже получить подсказку. Если I exec 3>&0 перед запуском подоболочки, а затем читать из дескриптора 3 (-u 3), то я, по крайней мере, получаю приглашение, но команда чтения по-прежнему не получает ввода, который я набираю.

Как получить прочитанный встроенный модуль для корректного чтения с терминала (дескриптор файла stdin родителя)?

+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

В чем причина нисходящего потока? – thom

+0

это работает, спасибо. Я не знаю, почему кто-то дал вам ниспровержение. – kanaka

+0

Могу ли я сделать то же самое с функцией? Не могли бы вы также объяснить, что вы делаете? Вы перенаправляете 'stdin' и' stdout' форму родительского процесса в подоболочку? – unfa

Смежные вопросы