gpt4 book ai didi

bash:如何拦截每个命令

转载 作者:行者123 更新时间:2023-11-29 08:54:12 28 4
gpt4 key购买 nike

有没有办法拦截每一个给bash的命令?我可以通过定义一个函数 cd() 来拦截一个特定的命令,例如 cd 我可以对其他命令一次执行一个命令出色地。但是我可以编写一个在执行每个命令之前调用的函数吗?我想做一些命令的簿记,然后执行命令。

Michał Š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 次。其他四个来 self 对 PS1 的定义,我在其中运行以下命令:$(git branch 2>/dev/null | grep -e "\* "| sed "s/^..\(.*\)/{\1}/")。两个问题:

  • 是否可以将命令准确地写入/tmp/trace.txt
  • 更重要的是,是否可以不使命令的输出困惑,而只将命令写入 /tmp/trace.txt

我对能够在一个地方记录所有 bash session 的命令的可能性感到非常兴奋!

最佳答案

您可以设置 PS4 变量,如果跟踪打开,它会在执行之前对每个正在执行的命令进行评估:

PS4='$(echo $(date) $(history 1) >> /tmp/trace.txt) TRACE: '

然后,启用跟踪:

set -x

要停止跟踪,只需:

set +x

关于bash:如何拦截每个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6930527/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com