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
4

2 回答 2

3

调用input是从参数分配中获取其标准输出。一旦分配完成,它的(不存在的)标准输出就会关闭,这read解释为导致read返回的 EOF。

请改用分号。

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

(删除管道也允许in在当前 shell 中分配,而不是在管道引起的子 shell 中。)

于 2013-07-24T12:29:03.287 回答
0

你的线

then in="yes" | input

是问题。您不想通过管道分配ininto input。用分号或换行符分隔命令:

then in="yes"; input
于 2013-07-24T12:28:54.347 回答