- 论坛徽章:
- 0
|
今天查看了一个系统初始化的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最后执行的命令?
但还不理解怎么来的。。。
- [root@Jamin-SFO1 ~]# echo 1 2 3 | { read x y; echo $y; }
- 2 3
- [root@Jamin-SFO1 ~]# history 1
- 418 history 1
- [root@Jamin-SFO1 ~]# history 1 | { read x y; echo $y; }
- history 1 | { read x y; echo $y; } #为啥输出是这个,而不是history 1?
复制代码 |
|