在 bash 中每 n 个命令执行一次函数
Execute function every n commands in bash
我想制作一个程序,在 bash 中每 n 个命令执行一次。例如,我希望用户在 bash.
中每 5 个命令回答一个问题
我认为这个功能可以仅使用 bash 脚本来实现,因为我找不到合适的解决方案。我不想编译新的 bash,我认为这可以通过 bash 脚本来完成。如果是这样,我是否必须更改 bashrc?
您可以在每个用户命令(每次显示提示时)后使用 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."'
我喜欢。
您可以使用自定义函数在 shell 中捕获 DEBUG
信号。
runcmd() { if (( n==5 )); then n=0; pwd; else ((n++)); fi; }
trap 'runcmd' DEBUG
使用您的自定义命令或脚本更改 pwd
。
trap 'handler' DEBUG
在 运行 中的每个命令之后调用 handler
shell 但不会调用 runcmd
只是按下回车在 shell.
编辑:感谢@kojro:您可以将此函数缩短为:
runcmd() { (( n++ % 5 )) || pwd; }
我想制作一个程序,在 bash 中每 n 个命令执行一次。例如,我希望用户在 bash.
中每 5 个命令回答一个问题我认为这个功能可以仅使用 bash 脚本来实现,因为我找不到合适的解决方案。我不想编译新的 bash,我认为这可以通过 bash 脚本来完成。如果是这样,我是否必须更改 bashrc?
您可以在每个用户命令(每次显示提示时)后使用 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."'
我喜欢。
您可以使用自定义函数在 shell 中捕获 DEBUG
信号。
runcmd() { if (( n==5 )); then n=0; pwd; else ((n++)); fi; }
trap 'runcmd' DEBUG
使用您的自定义命令或脚本更改 pwd
。
trap 'handler' DEBUG
在 运行 中的每个命令之后调用handler
shell 但不会调用runcmd
只是按下回车在 shell.
编辑:感谢@kojro:您可以将此函数缩短为:
runcmd() { (( n++ % 5 )) || pwd; }