linux - 如何让一个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 循环一样等待用户输入?
解决方案
问题是循环发生在管道中,因此标准输入被重定向到上一个管道命令的输出。您可以使用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 - 如何根据开始和结束字符串删除正在运行的 shell 脚本的部分标准输出?
- reactjs - IonList 分隔线呈现为短
- c++ - CMake 正在替换我的 Makefile 并构建错误的可执行文件。无法获取正确的可执行文件
- c++ - C++ 正则表达式库;如何判断哪些交替匹配
- javascript - 为什么我的 DeleteTodos 函数在我的 TodoList 应用程序中表现得如此奇怪?
- javascript - 获取 UI 上的行数
- java - 如何在没有文件部分界面的应用程序之间共享文件
- python - 使用 PySpark 删除 spark 数据框中嵌套结构中的行(文本中的详细信息)
- python - 十六进制到纯 ASCII?Python 2.7.13
- javascript - 如果我的 Redux Store 中的状态是可观察的,我应该在每个需要它的组件中订阅它还是在一个地方订阅并作为输入传递?