2015-11-19 131 views
1

如下所示,第一个循环的目标是从文本文件中读取步骤,而第二个循环旨在根据用户在屏幕上看到的内容接受来自用户的选项,并执行某些操作,比如说配置package.use或其他内容,然后继续执行下一步,直到步骤结束。在bash中这个嵌套的while循环有什么问题?

问题是第二个while循环既不会显示选项也不会连续读取文本文件中的步骤,它只是在执行第一步的步骤后退出while循环,在这种情况下,它显示执行的结果emerge --pretend ceph并退出两个循环。

步骤文本文件:

ceph 
jdk 
firefox 
... 

嵌套while循环:

#/bin/bash 
STEPS="./steps" 
while read -r line; 
do 
    if [[ ! $line = "#"* ]]; then 
       emerge --pretend $line 
       while read -p 'Please choose something:(1:package.use 2:package.license 3:package.keywords) ' input; 
       do 
       case $input in 
         1) echo "$input has been chosen." 
          #set up package.use 
         ;; 
         ... 
       esac 
       done 
     fi 
done <$STEPS 
+0

可能重复:[阅读bash中输入一个while循环(http://stackoverflow.com/questions/6883363/read-input -in-的bash-内部-A-while循环)。 –

+0

显然,这个线程与这个线程完全不同,因为我所要求的是一个嵌套的while循环,而且,我的情况并不是从文件或目录中读取的。我问的是在while循环中,还有另一个while循环用于接受用户的选项。 –

+0

它仍然是同样的原因和相同的效果。不要紧,另一个问题没有嵌套的'while',重要的是它试图从已经被重定向的'read'循环中的用户'读'。该问题中发布的解决方案也适用于您的问题。 –

回答

0

的问题是您的外环重定向stdin来自您的文件,当你尝试做一个内部循环中的read,它也读取该文件。

见一些可能的解决以下问题:

Read input in bash inside a while loop

+0

如果您确定了重复,请为此创建注释。一旦你有足够的权限,你将被允许实际投票结束一个重复的问题(它需要5票才能完成,尽管金牌会员可以自己做)。 – tripleee

+0

谢谢。我会去做。我不确定什么是正确的协议。 –

+0

正式的文档在这里:http://meta.stackexchange.com/help/privileges/close-questions ...但它没有从一个人的角度来解释它的信誉不到3,000。也许有关于该部分的某个元问题。 – tripleee