如何逐行读取并从键盘获取输入?

发布于 2024-10-16 17:54:58 字数 304 浏览 1 评论 0 原文

我有像 - 这样的 shell 脚本,

while read -r line;
do 
echo $line
done  < file.txt

工作正常,但我需要在从文件读取每一行后提示用户输入。 我尝试添加“read”,但这不起作用。

while read -r line;
do 
echo $line
#prompt user here
read input_user
done  < file.txt

有什么想法吗?我也愿意使用 awk。

I have shell script like -

while read -r line;
do 
echo $line
done  < file.txt

That's working fine, but I need to prompt the user for input after each line read from the file.
I tried adding "read " but that's not working.

while read -r line;
do 
echo $line
#prompt user here
read input_user
done  < file.txt

Any thoughts? I'm open to using awk too.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

草莓酥 2024-10-23 17:54:58

您可以使用 read-u 选项来指定文件句柄:

while read -u 9 -r line; do 
    echo $line
    read -p 'Press ENTER ' input_user
done  9<file.txt

-u 99 意味着 while 循环和“常规”read 语句中的读取仍然来自标准输入。

您通常可以选择任何尚未使用的文件句柄 - 012 分别是标准输入、输出和错误。我倾向于从 9 开始,然后根据需要逐步向下,具体取决于我需要一次访问多少个文件句柄。

成绩单样本:

pax$ ./qq.sh
line 1
Press ENTER <ENTER pressed>
line 2
Press ENTER <ENTER pressed>
line 3
Press ENTER <ENTER pressed>
line 4
Press ENTER <ENTER pressed>
pax$ _

You can use the -u option of read which specifies the file handle:

while read -u 9 -r line; do 
    echo $line
    read -p 'Press ENTER ' input_user
done  9<file.txt

The -u 9 combined with the 9<file.txt means that the reads in the while loop and "regular" read statements still come from standard input.

You can generally choose any file handle not already used - 0, 1 and 2 are standard input, output and error respectively. I tend to start at 9 and work my way down as needed, depending on how many file handles I need to access at once.

Sample transcript:

pax$ ./qq.sh
line 1
Press ENTER <ENTER pressed>
line 2
Press ENTER <ENTER pressed>
line 3
Press ENTER <ENTER pressed>
line 4
Press ENTER <ENTER pressed>
pax$ _
触ぅ动初心 2024-10-23 17:54:58

对循环的读取使用不同的FD。

while read -u 4 -r line
do 
  echo $line
  #prompt user here
  read input_user
done 4< file.txt

Use a different FD for the loop's read.

while read -u 4 -r line
do 
  echo $line
  #prompt user here
  read input_user
done 4< file.txt
你的他你的她 2024-10-23 17:54:58

如果您确实指的是键盘

while read -r line; do 
    echo $line
    #prompt user here
    read input_user </dev/tty
done <file.txt

则无论任何重定向如何,都将从连接的终端读取。

If you really mean keyboard,

while read -r line; do 
    echo $line
    #prompt user here
    read input_user </dev/tty
done <file.txt

will read from the attached terminal regardless of any redirections.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文