linux - 如何让while循环等待用户输入?

标签 linux bash

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

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/

相关文章:

c# - Linux下Mono如何获取主板和处理器唯一标识?

bash - Dockerfile 覆盖 ENV 变量

linux - 如何订购具有特定条件的文本文件?

bash - 将 stdin 作为另一个文件添加到 tar 存档

linux - 如何在 Linux 中查看正在使用的文件

python - 遍历我的数据结构,并为其输入随机值

linux - 验证 IP 是否存在于文件中

perl - 一旦进程开始使用 shell 脚本就放弃 shell

linux - TMOUT后如何清除终端窗口

linux - 永久更改 GDB 中的反汇编风格