在第一个循环中,它等待用户键入某些内容,而在第二个循环中,它不键入。

for f in *; do
  echo $f
  IFS= read -r opt
done

find . -maxdepth 1 -type f -name "*" | while read f; do
  echo $f
  IFS= read -r opt
done

问题
如何让while循环像for循环一样等待用户输入?

最佳答案

问题是循环发生在管道中,因此标准输入被重定向到前一个管道命令的输出。您可以使用exec将正常的标准输入重定向到不同的文件描述符并从中读取用户输入:

exec 3<&0
find . -maxdepth 1 -type f -name "*" | while read f; do
  echo $f
  IFS= read -r -u3 opt
  echo $opt
done
exec 3<&-  # Close fd3

关于linux - 如何获取while循环以等待用户输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50124555/

10-14 19:15
查看更多