首页 > 解决方案 > 如何让一个while循环等待用户输入?

问题描述

在第一个循环中它等待用户输入一些东西,而在第二个循环中它没有。

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 循环一样等待用户输入?

标签: linuxbash

解决方案


问题是循环发生在管道中,因此标准输入被重定向到上一个管道命令的输出。您可以使用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

推荐阅读