巨简单循环shell脚本验证&符号后台操作(并记录查看当前shell的方法)
2010-11-30 22:10
711 查看
今天看大名鼎鼎的abs,看到里面说在命令后面加&符号即可表示该命令后台执行。
如 sleep 10 & 在命令行的运行结果是
[1]7039 #(7039)是进程号
于是按照书中举例编写如下脚本:
#!/bin/sh
for i in 1 2 3 4 5 6 7 8 9 10
do
echo -n "$i "
done & #据说此处可以使上述循环后台执行
echo
for i in 11 12 13 14 15 16 17 18 19
do
echo -n "$i "
done
echo
上述脚本预期运行结果为 上述数字可能随机排列 即 并不一定按照顺序输出,因为第一个循环为后台执行。
但运行后发现 结果仍然按照顺序输出。
分析原因:
开始考虑#!/bin/sh的问题,可能是shell版本不对,于是查看当前shell
(此处记一下查看shell的命令
1、echo $SHELL
2、echo $0 ---并不是所有版本都支持
3、env | grep SHELL
4 、先ps查看进程,然后在进程中查看是何shell)
然后分析可能是循环较短,导致无法观察效果,于是将循环扩大,但仍然无用
最后将脚本循环中的&符号去掉,改为在第一个循环后加入sleep 10&
预期结果:
假设不加& 那么第一个循环执行完之后,进程将会休眠10秒,然后再执行第二个循环。
如果加上& 则休眠变成后台执行,两个循环连续输出
运行脚本,符合预期,验证成功。
但仍然不知道,为何将&放在循环后面不能够使循环后台执行。很是费解。
如 sleep 10 & 在命令行的运行结果是
[1]7039 #(7039)是进程号
于是按照书中举例编写如下脚本:
#!/bin/sh
for i in 1 2 3 4 5 6 7 8 9 10
do
echo -n "$i "
done & #据说此处可以使上述循环后台执行
echo
for i in 11 12 13 14 15 16 17 18 19
do
echo -n "$i "
done
echo
上述脚本预期运行结果为 上述数字可能随机排列 即 并不一定按照顺序输出,因为第一个循环为后台执行。
但运行后发现 结果仍然按照顺序输出。
分析原因:
开始考虑#!/bin/sh的问题,可能是shell版本不对,于是查看当前shell
(此处记一下查看shell的命令
1、echo $SHELL
2、echo $0 ---并不是所有版本都支持
3、env | grep SHELL
4 、先ps查看进程,然后在进程中查看是何shell)
然后分析可能是循环较短,导致无法观察效果,于是将循环扩大,但仍然无用
最后将脚本循环中的&符号去掉,改为在第一个循环后加入sleep 10&
预期结果:
假设不加& 那么第一个循环执行完之后,进程将会休眠10秒,然后再执行第二个循环。
如果加上& 则休眠变成后台执行,两个循环连续输出
运行脚本,符合预期,验证成功。
但仍然不知道,为何将&放在循环后面不能够使循环后台执行。很是费解。
相关文章推荐
- 前后台实现验证当前操作记录是否存在
- 前后台实现验证当前操作记录是否存在
- 前后台实现验证当前操作记录是否存在
- 后台系统无刷新页面记录当前操作位置方法
- shell脚本方便操作记录(持续添加)
- SpringMVC Interceptor 配置由简单到复杂及相关异常解决办法,记录用户操作日志
- Linux的简单shell脚本中修改文件操作
- IP记录Linux所有用户操作日志的方法(附脚本)
- 获取后台url操作日志记录简单
- shell脚本 数组操作报Syntax error: "(" unexpected
- 你不知道的shell用法和脚本,简单&强大
- 大坑记录 - shell脚本删除操作
- sqlserver用当前行减去前一行的数据的简单处理方法 -- 不使用循环
- 编写shell脚本查看linux当前各用户的cpu和memory消耗比例
- Linux下查看/管理当前登录用户及用户操作历史记录
- ThinkPHP模板中判断volist循环的最后一条记录的验证方法
- Linux执行shell脚本方式及区别&命令后台运行
- Linux下查看/管理当前登录用户及用户操作历史记录
- 简单的通过shell脚本接收参数进行数据库操作
- Linux下查看/管理当前登录用户及用户操作历史记录