我有两个非常简单的脚本。我问过这个问题但人们以为我是在不同的平台上做的。实际上这两个脚本都在同一个文件夹中。
一个是 source.sh
#!/bin/bash
echo "start"
./call.sh
echo "end"
第二是call.sh
#!/bin/bash
passDir="/etc/passwd"
while read line
do
while true
do
echo "prompt"
#propmt for username
read -p "Enter username : " username
egrep "^$username" $passDir >/dev/null
if [ $? -eq 0 ]; then
echo "$username exists!"
else
userName=$username
break
fi
done
done < user.txt
和 user.text 文件只有两行中的两行
Hello
world
输出:
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt
exisats!
prompt
直到我按下Ctrl + d,我真的很感激,如果有人可以告诉我如何解决这个问题。
答案 0 :(得分:1)
您可以将其缩小为最小示例:
#!/bin/bash
while read line
do
echo line is $line
echo "prompt"
read -p "Enter username : " username
echo username is $username
done < user.txt
现在问题很明显:脚本从user.txt
读取所有内容。
只有read
应该从user.txt
读取。我们可以通过文件描述符:
read
这样做
#!/bin/bash
exec 3< user.txt # open the file, give it File Descriptor 3
while read -r -u3 line
do
echo line is $line
echo "prompt"
read -p "Enter username : " username
echo username is $username
done
exec 3<&- # close the file