Есть ли способ перехватить каждую команду дано bash
? Я могу перехватить конкретную команду, например, cd
, определив функцию cd ()
, и я могу сделать это по одной команде за раз и для других команд. Но могу ли я написать функцию, которая вызывается перед выполнением каждой команды? Я хочу провести учет команд, а затем выполнить команду.
Идея Михала Шрайера 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}/'
И среда, 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 в одном месте!