免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1521 | 回复: 2
打印 上一主题 下一主题

[文本处理] history 1命令结合管道的迷惑。。。请高手解惑下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-10 22:49 |只看该作者 |倒序浏览
今天查看了一个系统初始化的Shell脚本,其中有一段命令是配置记录bash命令日志的,如下:

LOGIN_IP=$(who am i | awk '{print $NF}')
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });echo $(date +%Y-%m-%d %H:%M:%S) [$(whoami)@$SSH_USER$LOGIN_IP `pwd` ]$msg >> /var/log/.history; }'

其中的PROMPT_COMMAND是bash的环境变量,这个变量的中内容是作为一个普通的bash命令执行的,而且执行时间是在bash显示prompt之前。 这个好理解,就是说每执行一个命令前,PROMPT_COMMAND里面的命令先执行,然后是prompt。

但里面的msg=$(history 1 | { read x y; echo $y; });让我迷惑了,这段怎么理解,我快说不明白这个问题了。。。最后的结果是确定的:$msg变量保存的是bash最后执行的命令?
但还不理解怎么来的。。。

  1. [root@Jamin-SFO1 ~]# echo 1 2 3 | { read x y; echo $y; }
  2. 2 3
  3. [root@Jamin-SFO1 ~]# history 1
  4.   418  history 1
  5. [root@Jamin-SFO1 ~]# history 1 | { read x y; echo $y; }
  6. history 1 | { read x y; echo $y; }                        #为啥输出是这个,而不是history 1?
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2015-10-11 08:44 |只看该作者
When the -o history option to the set builtin is enabled, the shell provides access to the command history, the list of commands previously typed.

评分

参与人数 1信誉积分 +10 收起 理由
hdlover09 + 10 赞一个!

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2015-10-12 00:35 |只看该作者
回复 2# waker



   谢谢解答!!!
   是否可以下面这样理解?(先存入命令到列历史命令列表,然后再执行这个命令?)
   
   当在Shell命令行下输入history 1 | { read x y; echo $y; },按下回车键时,Shell最先做的是把前面那段输入命令存入到
历史命令列表中,此时历史命令列表中最后的一条命令就是history 1 | { read x y; echo $y; },然后才是执行这个命令,输出还是这个命令。。。
  我先前理解错误是以为Shell会先执行history 1,此时并没有将命令存入到历史命令列表,然后以为输出是history 1。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP