2013-07-24 35 views
0

調用,你會發現一個簡單的代碼。 如果讀輸入是Y ,我正在調用函數輸入,但輸入函數中的讀命令從不執行。無法讀取輸入,而從下面的函數

#!/bin/bash 
input() { 
    read -p "Press any key to continue..." # read input (this part never executed) 
} 

mg() # prompt user for y=true, n=false 
{ 
    [ $FORCE ] && echo>&2 "$* (forced)" && return 
    while read<&2 -p "$* (Y/N)? [Y] " YN 
    do 
     [ -z "$YN" -o "$YN" = Y ] && return 
     [ "$YN" = N ] && return 1 
    done 
    err "failed to read from YN $*"  
} 


if mg "Enter Input?"  
then in="yes" | input # call function input if mg return Y 
else in="no" 
fi 
+0

嘗試用「bash的-x 」執行,看看發生了什麼事情。 – sudocode

+2

在if中使用管道'|'的任何具體原因? – RedBaron

回答

0

你行

then in="yes" | input 

是問題。您不想將in的任務分配到input。分隔命令用分號或換行符:

then in="yes"; input 
+0

非常感謝。 – godgiven

3

呼叫到input越來越從參數分配它的標準輸出。只要分配完成,它的(非遠程)標準輸出就會關閉,其中read將解釋爲導致read返回的EOF。

改爲使用分號。

if mg "Enter Input?" 
then in="yes"; input 
else in="no" 
fi 

(拆卸管道還允許in在當前shell分配,而不是在管道引起的子shell。)