在bash中每n个命令执行一次函数

我想制作一个程序,它将在bash中每n个命令执行一次。 例如,我希望用户在bash中为每5个命令回答一个问题。

我觉得这个函数只能用bash脚本实现,是我找不到合适的解决方法。 我不想编译一个新的bash,我认为这可以通过一个bash脚本来完成。 如果是这样,我必须改变bashrc?

您可以使用自定义函数在DEBUG中捕获DEBUG信号。

 runcmd() { if (( n==5 )); then n=0; pwd; else ((n++)); fi; } trap 'runcmd' DEBUG 

使用您的自定义命令或脚本更改pwd

  • trap 'handler' DEBUG在shell中运行每个命令之后, trap 'handler' DEBUG调用handler但在shell中按下输入时不会调用runcmd

编辑:感谢@kojro:你可以缩短这个功能:

 runcmd() { (( n++ % 5 )) || pwd; } 

您可以使用PROMPT_COMMAND shell变量在每个用户命令(每次显示提示)后运行一个命令,并使用一个计数器来每五次执行一次:

 PROMPT_COMMAND="if [ \"\$HELLO_COUNTER\" -le 0 ]; then HELLO_COUNTER=5; echo 'Hello, world.'; else let --CTR; fi" 

编辑:@kojiro在评论中有一个好主意,使用内置的LINENO变量而不是一个新的计数器,如

 PROMPT_COMMAND='(( LINENO % 5 )) || echo "Hello world."' 

我喜欢。