免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1671 | 回复: 2

[文本处理] history脚本调用疑惑 [复制链接]

论坛徽章:
10
2015亚冠之全北现代
日期:2015-06-16 09:16:24CU十四周年纪念徽章
日期:2016-08-08 11:20:3915-16赛季CBA联赛之青岛
日期:2016-02-17 09:14:2015-16赛季CBA联赛之北京
日期:2016-02-12 22:23:3215-16赛季CBA联赛之同曦
日期:2016-01-15 11:11:0815-16赛季CBA联赛之广东
日期:2016-01-15 10:46:4215-16赛季CBA联赛之北控
日期:2015-12-19 18:20:002015亚冠之山东鲁能
日期:2015-07-02 14:03:482015亚冠之吉达阿赫利
日期:2015-06-28 14:08:4015-16赛季CBA联赛之天津
日期:2017-04-21 10:37:41
发表于 2015-11-18 16:46 |显示全部楼层
突发奇想,通过脚本执行历史命令,节省时间,问题来了;
小弟脚本如下
  1. #!/bin/bash
  2. for i in `seq -w 839 851`
  3. do
  4.         cd /root/soft && $(eval !$i)
  5.         #cd /root/soft && !$i
  6.         sleep 1
  7. done
复制代码

history

history

想等到的结果为执行历史命令!839 - !851历史命令;执行脚本如下
  1. [root@SHHQ-LT10L5G-E9000-0012 soft]# sh -xv test.sh
  2. #!/bin/bash
  3. for i in `seq -w 839 851`
  4. do
  5.         cd /root/soft && $(eval !$i)
  6.         sleep 1
  7. done
  8. ++ seq -w 839 851
  9. + for i in '`seq -w 839 851`'
  10. + cd /root/soft
  11. ++ eval '!839'
  12. +++ '!839'
  13. test.sh:行4: !839: 未找到命令
  14. + sleep 1
  15. + for i in '`seq -w 839 851`'
  16. + cd /root/soft
  17. ++ eval '!840'
  18. +++ '!840'
  19. test.sh:行4: !840: 未找到命令
  20. ……
复制代码
求大神指教!

论坛徽章:
12
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
发表于 2015-11-18 17:35 |显示全部楼层
本帖最后由 sync_1521 于 2015-11-18 17:37 编辑

!在脚本中应该不能当命令用吧  
比如你会在判断中用到
if [ ! -n $a ]
如果能当命令用岂不乱了。。
坐等大神解惑
  1. [root@test ~]# type !
  2. ! is a shell keyword
复制代码

论坛徽章:
0
发表于 2015-11-18 19:12 |显示全部楼层
本帖最后由 lgfang 于 2015-11-18 19:13 编辑

!number 只有在交互shell下才能用吧。

这个也许可以。不过我感觉这样是不是不太安全?

  1. history | awk '$1~/839/,$1~/851/{print}' | while read history_number command; do eval "$command"; done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP