Linux shell脚本嵌套读取

时间:2014-05-29 06:21:59

标签: linux bash shell

当我编写shell脚本时,我遇到嵌套读取的问题,如下面的代码。

while read entry
do
    IFS=' ' read -a array <<< "$entry"

    read -p "Read from keyboard" keyin

    case $keyin in
       [a]* ) .....
       .....
    esac
done << file

我希望能够阅读键盘输入,但是阅读-p .... keyin&#39;始终从&#39;文件&#39;中读取值。有人对此有所了解吗?在这种情况下我可以用任何其他方法读取键盘输入吗?

感谢。

1 个答案:

答案 0 :(得分:3)

假设您正在使用bash,您可以从不同的文件描述符安排read

while read -r -u 3 entry
do
    IFS=' ' read -a array <<< "$entry"

    read -p "Read from keyboard" keyin

    case $keyin in
       [a]* ) .....
       .....
    esac
done 3< file

3<重定向file作为文件描述符3的输入; -u 3告诉read从文件描述符3中读取。因此,外部循环作用于文件中的行,使内部read作用于键盘输入。 -r是现代的但是必须避免意外行为(我学会了没有它的程序;我不喜欢需要使用它 - 标志应该是启用修改行为所必需的。)

请注意,问题中的原始代码使用<< file;开始here document,但显然不是预期的,因为没有显示此处文件的正文或结尾。