2016-03-25 3 views
0

I-Skript, das einen Sub-Shell/Hintergrund-Befehl startet Eingabe zu lesen und dann mehr Arbeit zu tun:Einsatz Lese builtin Befehl von den Eltern stdin zu lesen, während in einer Subshell

#!/bin/bash 

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

sleep 3600 # more work 

Mit dem obig ich nicht tun bekomme sogar eine Aufforderung. Wenn ich exec 3>&0 vor dem Start der Subshell und dann aus dem Deskriptor 3 (-u 3) lesen, dann bekomme ich zumindest die Eingabeaufforderung, aber der Lesebefehl erhält immer noch keine Eingabe, die ich eintippe.

Wie bekomme ich die Lese-Builtin korrekt vom Terminal gelesen (Eltern stdin Datei-Deskriptor)?

+0

Bitte senden Sie komplette Beispiele – aless80

+3

Hintergrundprozesse nicht vom Terminal lesen erlaubt. – Barmar

+1

Look-up-Co-Prozesse in 'Mann bash' – cdarke

Antwort

1

Wie bekomme ich das richtig gelesen von dem Terminal (Eltern stdin Dateideskriptor) lesen gebautet?

Sie wollen könnte dies versuchen (die filedescriptors der Eltern verwenden): sind

#!/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

Was ist der Grund für den Downvote? – thom

+0

das funktioniert, danke. Ich weiß nicht, warum dir jemand einen Downvote gegeben hat. – kanaka

+0

Kann ich dasselbe mit einer Funktion machen? Kannst du auch erklären, was du tust? Sie leiten 'stdin' und' stdout' vom übergeordneten Prozess in die Subshell um? – unfa