我有一个应该按如下方式运行的bash脚本:从(大)文件中读取一行,处理该行,显示结果,等待来自用户的运行信号,重新开始。现在它看起来像
while read newline
do
# process newline
# display newline
read go_ahead
done < my_input_file.txt
处理和显示看起来很好,但很难分辨,因为 - 这是我的问题 - 脚本不会停止阅读go_ahead变量。我猜这是因为它认为它应该从my_input_file.txt读取换行符和 go_ahead?无论如何,有人能告诉我如何解决这个问题吗?
答案 0 :(得分:2)
最简单的方法可能是为输入数据使用单独的文件描述符。像这样:
#!/usr/bin/env bash
exec 3< /path/to/inputfile.txt
while read -u 3 newline; do
processed=$(tr '[a-z]' '[A-Z]' <<<"$newline")
printf '%s\n' "$processed"
read go_ahead
done
答案 1 :(得分:1)
#!/bin/bash
exec 3>&1
while read line; do
echo $line
read -u 3 -p 'continue(y/n)? ' yn
[[ $yn == n ]] && break
done < "$1"
exit 0
要读取-u
arg,请指定另一个描述符。