#!/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 :(得分: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