由于While,读取命令未按预期工作

时间:2017-02-03 16:00:07

标签: linux bash macos shell unix

我面临一个奇怪的错误,

我有一个有一些输入的文件,根据这些输入我要求用户确认并继续操作(如下所示),

#!/bin/bash

func() {
cat testing | while read line
do
  if [ $line = "hi" ]
  then
    while true
    do
      read -p "[y/n] : " c
      case $c in
        [nN] ) return 1;;
        [yY] ) return 0;;
        * ) echo "Enter y/Y or n/N";;
      esac
    done
  fi
  echo "HELLO !!"
done
}

func

由于函数中的 读取行 ,实际的 读取-p“[y / n]:” 正在从上面的测试文件中选择输入,而不是从STDIN中选择。

如果删除 cat testing |,程序运行正常读取行 循环(这显然不是我想要的)。

之前是否有人面对此问题或有人可以帮助我解决此问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

testing使用不同的文件描述符(管道)。

while IFS= read -r line <&3; do
    ...
done 3< testing