有沒有辦法攔截給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呢? –