bash: как перехватить каждую команду

Есть ли способ перехватить каждую команду дано 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 в одном месте!

8
задан Yogeshwer Sharma 3 August 2011 в 20:03
поделиться