有没有办法拦截给bash
的每个命令?我可以通过定义一个函数cd()
来拦截一个特定的命令,例如cd
,我也可以为其他命令一次执行一个命令。但是我可以编写一个函数,在每个命令执行之前被调用吗?我想做一些记录的命令,然后执行命令。bash:如何拦截每个命令
米哈尔Šrajer的想法PS4='$(echo $(date) $(history 1) >> /tmp/trace.txt) TRACE: '
看起来非常有前途,但这里是我的输出获得:
$ ping www.google.com
TRACE: ping www.google.com
PING www.l.google.com (74.125.224.52) 56(84) bytes of data.
64 bytes from 74.125.224.52: icmp_seq=1 ttl=56 time=3.77 ms
64 bytes from 74.125.224.52: icmp_seq=2 ttl=56 time=2.33 ms
^C
--- www.l.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.334/3.054/3.774/0.720 ms
TRACE: echo -ne '\033]0;myhost.com /home/yogeshwer/github/myproject\007'
TRACE: grep -e '\* '
TRACE: git branch
TRACE: sed 's/^..\(.*\)/ {\1}/'
而且Wed Aug 3 12:47:27 PDT 2011 6672 ping www.google.com
被写入在/tmp/trace.txt整整5倍。其他四个来自我的定义PS1
,我运行以下命令:$(git branch 2> /dev/null | grep -e "\* " | sed "s/^..\(.*\)/ {\1}/")
。两个问题:
- 是否可以正确地将命令写入
/tmp/trace.txt
? - 更重要的是,是否有可能不混乱命令的输出,但只写入命令
/tmp/trace.txt
?
我很高兴能够在一个地方记录我所有bash会话中的命令的可能性!
'.bash_history'不足以满足您的需求,我接受它吗? – Andrew
请注意,'.bash_history'仅在shell退出时更新。 –
PROMPT_COMMAND呢? –