分页: 1 / 1

while read line的循环中 read a 不起作用啊

发表于 : 2011-07-04 15:38
erol
while read line的循环中read 变量
完全不执行,不起作用啊
比如
文件b里有3行文本

代码: 全选

#!/bin/bash
cat "b" | while read line
do
read a
echo $a
done
只出现了一空行就结束了
像这样

代码: 全选

xxxxx$

xxxxx$

大虾们是怎么解决这个问题的?用其它方式的逐行读取吗?

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-04 18:03
erol

代码: 全选

n=`cat $cmdfile` | wc -l`
for ((a=1; a <=n ; a++))
do
eval `cat $cmdfile | head -n $a | tail -n 1`
done
虽然拿这个可以替代,但是我上面那样为什么不行啊

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-04 18:05
sk1418
你想要这个效果?

代码: 全选

#!/bin/bash
cat "b" | while read yourLine
do
echo $yourLine
done

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-04 19:18
sk1418
哦,刚才我发的时候,没看到你的第2帖。刚才弄错了,现在知道你要什么了。

一般有两个办法。

1,用for,别用read循环读,在for里用read接收键盘

代码: 全选

for foo in `cat b`
do
echo -n "input  something related to $foo:"; read bar
echo $bar
done
2, 非要用while read

代码: 全选

while read yourLine
do
echo "line:"$yourLine":"
read a < /dev/tty
echo "a:"$a
done <b

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-05 6:59
fnan
erol 写了:while read line的循环中read 变量
完全不执行,不起作用啊
比如
文件b里有3行文本

代码: 全选

#!/bin/bash
cat "b" | while read line
do
read a
echo $a
done
只出现了一空行就结束了
像这样

代码: 全选

xxxxx$

xxxxx$

大虾们是怎么解决这个问题的?用其它方式的逐行读取吗?
管道后面的read接受数据流输入,不是接受标准输入,按你想像的工作就见鬼了。
想要这效果?
kose5@kose5-Aspire-4552:~$ cat b
echo "名字?"
read name
echo "你好,$name。"
kose5@kose5-Aspire-4552:~$ eval "$(cat b)"
名字?
fnan
你好,fnan。

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-05 13:24
lexdene
file
xxxx

xxxx
shell

代码: 全选

#!/bin/bash
cat file | while read line
do
echo $line
done
输出结果:
xxxx

xxxx

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-05 22:55
fnan
不过不明白lz想执行每行的命令还是每一行读一次标准输入。

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-08 1:31
erol
fnan 写了:不过不明白lz想执行每行的命令还是每一行读一次标准输入。
谢谢各位给出的解决方案,事实上是想从一个文档里读行,按需要顺序读或者倒序读行,这一行文字是一个命令,命令里有我定义的一个函数,而函数里面有read命令

Re: while read line的循环中 read a 不起作用啊

发表于 : 2011-07-08 8:50
fnan
问题是函数里想read什么呢?