使用 read 循环查找结果时读取用户输入

使用 read 循环查找结果时读取用户输入

我在 bash 脚本中使用以下语句来迭代 find 的结果:

find ./ -type f \( -iname \*.mkv -o -iname \*.mp4 \) | while read line; do

现在的问题是我无法在此循环中使用“read”要求用户输入,因为它会给我查找结果中的下一行。

read mainmenuinput

会给我下一个文件名,而不是等待用户输入。

我该如何解决这个问题?

谢谢雷风

答案1

find如果您使用从进程替换到循环的重定向,则可以对结果使用不同的文件描述符:

# this reads from fd 3
while IFS= read -r line <&3; do
    # this reads from fd 0 (stdin)
    read -p "Enter your input" main_menu_input
    # .. do stuff
done 3< <(
    find ... 
)

这会稍微损害可读性,因为 find 命令显示在底部,但它为您提供了文件描述符的最大灵活性。另外,while 循环是不是由于管道的原因,它在子 shell 中运行,因此,如果您在循环后面的代码中所依赖的 while 循环中设置变量,那么现在就可以了。

相关内容