gpt4 book ai didi

bash:循环中嵌套的交互式读取也使用读取

转载 作者:行者123 更新时间:2023-11-29 09:11:30 24 4
gpt4 key购买 nike

如何在此 while 循环中编写交互式响应代码?

#!/bin/bash

shows=$(< ${HOME}/.get_iplayer/tv.cache)

# ...
# ... stuff with shows omitted ...
# ...

function print_show {
# ...
return
}

while read -r line
do
print_show "$line"

read -n 1 -p "do stuff? [y/n] : " resp # PROBLEM

# ...
# resp actions omitted
# ...

done <<< "$shows"

因此,一个文件被读取、“处理”,然后生成的面向行的数据用于 while read 循环

但是 while 循环中的 read 行没有按预期工作,即它不等待用户响应,大概是由于它被封装的 while read 上下文。

您能否建议如何解决此问题或替代机制?

最佳答案

你已经正确地确定原因是在

while ...; do ...; done <<< "$shows"

循环,标准输入已被重定向,因此 read 不再从键盘读取。

你可以通过使用非0的文件描述符来解决这个问题;例如,

while read -r -u 3 line; do ...; done 3<${HOME}/.get_iplayer/tv.cache

将为文件使用 FD 3 而不是 FD 0,允许正常的 read(没有 -u)使用原始标准输入,或者

while ...; do read -n 1 -p "do stuff? [y/n] : " -u 3 resp; done 3<&0 <<< "$shows"

在用您的字符串替换 FD 0 之前将原始 FD 0 克隆到 FD 3。

关于bash:循环中嵌套的交互式读取也使用读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com