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

时间:2015-01-24 16:48:51

标签: linux bash shell bots

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

我认为这个功能只能使用bash脚本来实现,我找不到合适的解决方案。我不想编译新的bash,我认为这可以通过bash脚本完成。如果是这样,我是否必须更改bashrc?

2 个答案:

答案 0 :(得分:7)

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

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

trap 'runcmd' DEBUG

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

    运行shell 中的每个命令后,
  • trap 'handler' DEBUG调用handler,但只需在shell中按下即可调用runcmd

编辑:感谢@kojro:您可以将此功能缩短为:

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

答案 1 :(得分:3)

您可以使用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."'

我喜欢那样。