运行 在交互式 shell 中输入任何命令后的命令

Running a command after any command is entered in an interactive shell

如何在 any 命令完成后 运行 像 echo Done 这样的任意命令?

我希望能够将任何命令放入交互式 shell 中,并在完成后将其发送到 return 相同的命令,即

> pwd
/home/user
Done
> ls
...
Done
> whoami
user
Done

我知道它是否像 cd 这样的特定代码将是:

function cd () {
  builtin cd $@
  
  echo Done
}

但是我如何为所有命令执行此操作?

好的,我找到了两种方法:

Bash(来自 and ):

PROMPT_COMMAND='echo Done'

ZSH:

precmd() { "echo Done" }

对于bash:

  • 如果设置,$PROMPT_COMMAND 的值将在打印每个提示之前立即执行。
  • 可以在 PS0、PS1 和 PS2 中硬引用命令替换,每次打印相应的提示时都会执行这些替换。
  • 您可以设陷阱 SIG_CHLD:trap my-cmd CHLD。给定的命令将在当前环境中执行,每次子进程(命令)退出时,包括后台进程。这不包括内置函数(它们不是子进程),但它确实可以在脚本中使用。