sh/bash/dash/ksh/zsh等Shell脚本
-
erol
- 帖子: 61
- 注册时间: 2010-05-16 23:17
#1
帖子
由 erol » 2011-07-04 15:38
while read line的循环中read 变量
完全不执行,不起作用啊
比如
文件b里有3行文本
代码: 全选
#!/bin/bash
cat "b" | while read line
do
read a
echo $a
done
只出现了一空行就结束了
像这样
大虾们是怎么解决这个问题的?用其它方式的逐行读取吗?
伊吹风子的邻居常说:那孩子是个普通的地球人
-
erol
- 帖子: 61
- 注册时间: 2010-05-16 23:17
#2
帖子
由 erol » 2011-07-04 18:03
代码: 全选
n=`cat $cmdfile` | wc -l`
for ((a=1; a <=n ; a++))
do
eval `cat $cmdfile | head -n $a | tail -n 1`
done
虽然拿这个可以替代,但是我上面那样为什么不行啊
伊吹风子的邻居常说:那孩子是个普通的地球人
-
sk1418
- 帖子: 229
- 注册时间: 2007-07-01 17:36
- 系统: (En):System
- 来自: (En):address
-
联系:
#3
帖子
由 sk1418 » 2011-07-04 18:05
你想要这个效果?
代码: 全选
#!/bin/bash
cat "b" | while read yourLine
do
echo $yourLine
done
---
regards,
Kent
-
sk1418
- 帖子: 229
- 注册时间: 2007-07-01 17:36
- 系统: (En):System
- 来自: (En):address
-
联系:
#4
帖子
由 sk1418 » 2011-07-04 19:18
哦,刚才我发的时候,没看到你的第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
---
regards,
Kent
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#5
帖子
由 fnan » 2011-07-05 6:59
erol 写了:while read line的循环中read 变量
完全不执行,不起作用啊
比如
文件b里有3行文本
代码: 全选
#!/bin/bash
cat "b" | while read line
do
read a
echo $a
done
只出现了一空行就结束了
像这样
大虾们是怎么解决这个问题的?用其它方式的逐行读取吗?
管道后面的read接受数据流输入,不是接受标准输入,按你想像的工作就见鬼了。
想要这效果?
kose5@kose5-Aspire-4552:~$ cat b
echo "名字?"
read name
echo "你好,$name。"
kose5@kose5-Aspire-4552:~$ eval "$(cat b)"
名字?
fnan
你好,fnan。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
-
联系:
#6
帖子
由 lexdene » 2011-07-05 13:24
file
xxxx
xxxx
shell
代码: 全选
#!/bin/bash
cat file | while read line
do
echo $line
done
输出结果:
xxxx
xxxx
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#7
帖子
由 fnan » 2011-07-05 22:55
不过不明白lz想执行每行的命令还是每一行读一次标准输入。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
erol
- 帖子: 61
- 注册时间: 2010-05-16 23:17
#8
帖子
由 erol » 2011-07-08 1:31
fnan 写了:不过不明白lz想执行每行的命令还是每一行读一次标准输入。
谢谢各位给出的解决方案,事实上是想从一个文档里读行,按需要顺序读或者倒序读行,这一行文字是一个命令,命令里有我定义的一个函数,而函数里面有read命令
伊吹风子的邻居常说:那孩子是个普通的地球人
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#9
帖子
由 fnan » 2011-07-08 8:50
问题是函数里想read什么呢?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。