从函数调用时无法读取输入

时间:2013-07-24 11:54:13

标签: linux bash shell

您将在下面找到一个简单的代码。 如果读输入为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

2 个答案:

答案 0 :(得分:3)

input的调用是从参数赋值中获取其标准输出。赋值完成后,其(不存在)标准输出将立即关闭,read将其解释为EOF,导致read返回。

请改用分号。

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

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

答案 1 :(得分:0)

你的行

then in="yes" | input

是个问题。您不希望将in的作业输入input。用分号或换行符分隔命令:

then in="yes"; input