Bash 从意外源读取while循环中的变量
我试图将Bash 从意外源读取while循环中的变量,bash,shell,unix,Bash,Shell,Unix,我试图将file2的内容与file1的内容进行比较,并在此基础上采取一些措施 但当我尝试从用户(在变量应答中)获取是否启动的输入时,程序不会等待用户输入,而是自动获取分配给变量行的值 #!/bin/bash while read line; do var=`grep $line file1.txt` if [ -z "$var"] then echo "$line is not running" echo "Do you want to start? (Y/N)"
file2
的内容与file1
的内容进行比较,并在此基础上采取一些措施
但当我尝试从用户(在变量应答
中)获取是否启动的输入时,程序不会等待用户输入,而是自动获取分配给变量行
的值
#!/bin/bash
while read line;
do
var=`grep $line file1.txt`
if [ -z "$var"]
then
echo "$line is not running"
echo "Do you want to start? (Y/N)"
read answer
if [ "$answer" = 'Y' ] || [ "$answer" = 'N' ]
then
if [ "$answer" = 'Y' ]
then
(some action)
else
(action)
fi
else
(action)
fi
fi
done < file2
#/bin/bash
读行时;
做
var=`grep$line file1.txt`
如果[-z“$var”]
然后
echo“$line未运行”
echo“您想开始吗?(是/否)”
阅读答案
如果[“$answer”='Y']| |[“$answer”='N']
然后
如果[“$answer”=“Y”]
然后
(一些行动)
其他的
(行动)
fi
其他的
(行动)
fi
fi
完成<文件2
将循环的stdin重定向到文件2
。因此,在循环内部,stdin
被重定向,read
将从文件中读取,而不是从终端读取
使用bash
,您可以通过使用不同的文件描述符轻松解决此问题:
while read -r -u3 line; do
echo "$line"
read -p "Continue? " yesno
if [[ $yesno != [Yy]* ]]; then break; fi
done 3<file2
读取-r-u3行时;做
回音“$line”
阅读-p“继续?”是否
如果[[$yesno!=[Yy]*]];然后打破;fi
完成3对@rici提供的优秀答案的另一种方法,这次不需要bash:
while read -r line <&3; do
echo "$line"
printf "Continue? " >&2
read yesno
case $yesno in
[Yy]*) : ;;
*) break ;;
esac
done 3<file2
读取时-r行和2
阅读yesno
案件$YESNOIN
[Yy]*):;;
*)打破;;
以撒
完成3您的代码有一些输入错误:whileread
,并且缺少结束回勾。此外,您在第二个条件中编写了answer
,而不是$answer
。