我希望制作一个程序,在bash中每n个命令执行一次。例如,我想让用户每在bash中执行5个命令就回答一个问题。
我认为这个功能可以只用bash脚本来实现,但我找不到一个合适的解决方案。我不想编译一个新的bash,我认为这可以通过一个bash脚本来实现。如果是这样,我需要改变bashrc吗?
DEBUG
信号。runcmd() { if (( n==5 )); then n=0; pwd; else ((n++)); fi; }
trap 'runcmd' DEBUG
使用您自定义的命令或脚本替换pwd
。
trap 'handler' DEBUG
在运行shell中的每个命令后调用handler
,但是当仅按下Enter键时不会调用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."'
我很喜欢这个。
PROMPT_COMMAND
也会被执行。 - anubhava
runcmd() { (( n++ % 5 )) || pwd; }
。 :P - kojiroPROMPT_COMMAND
,那么在shell中仅按回车键仍会触发每五行的此命令,因为PROMPT_COMMAND
是一个命令。我相信有些读者会发现这很明显,但有些人可能不知道。 - kojiroPROMPT_COMMAND
和trap DEBUG
。 - anubhava