LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1233|回复: 7

Bash 一个进行后台循环的问题

[复制链接]
发表于 2008-11-5 22:30:05 | 显示全部楼层 |阅读模式
下面的代码为什么只输出12345678910?运行n次都是这个结果
请各位大侠指点迷津。。。:thank


  1.   1 #!/bin/bash
  2.   2 # background-loop.sh
  3.   3
  4.   4 for i in 1 2 3 4 5 6 7 8 9 10            # 第一个循环.
  5.   5 do
  6.   6   echo -n "$i "
  7.   7 done & # 在后台运行这个循环.
  8.   8      
  9.   9
  10. 10 echo   
  11. 11
  12. 12 for i in 11 12 13 14 15 16 17 18 19 20   # 第二个循环.
  13. 13 do
  14. 14   echo -n "$i "
  15. 15 done  
  16. 16 exit 0
复制代码
发表于 2008-11-5 23:01:29 | 显示全部楼层
bash 3.2-4ubuntu1 好像正常
都打印


把 echo 的 -n 去掉再试下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-5 23:09:37 | 显示全部楼层
Post by windwiny;1904615
bash 3.2-4ubuntu1 好像正常
都打印


把 echo 的 -n 去掉再试下

结果是
1
2
3
4
5
6
7
8
9
10
还没有正常退出程序.
回复 支持 反对

使用道具 举报

发表于 2008-11-6 08:43:49 | 显示全部楼层
楼主在第一个 for 后面再加一个 sleep 1 看看如何, 或者把每个 echo 后面都加一个 sleep 1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-6 18:58:20 | 显示全部楼层
Post by remote fish;1904670
楼主在第一个 for 后面再加一个 sleep 1 看看如何, 或者把每个 echo 后面都加一个 sleep 1

这样做的原理是什么?
回复 支持 反对

使用道具 举报

发表于 2008-11-6 19:29:54 | 显示全部楼层
多任务的实现机制, 标准输出的缓冲机制
回复 支持 反对

使用道具 举报

发表于 2008-11-7 11:01:24 | 显示全部楼层
lz估计是想实现进程并行的概念,但是1-10太少了 这个运行太快,时间太短

所以要不了你估计想出现 123101112135678...这样的状态
回复 支持 反对

使用道具 举报

发表于 2008-11-18 18:27:49 | 显示全部楼层
[abcusr@localhost test]$ sh test.sh

11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 [abcusr@localhost test]$ 6 7 8 9 10
我这里运行你的例子的结果。
直接输出的在转后台的前面已经输出了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表