运行 在交互式 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
。给定的命令将在当前环境中执行,每次子进程(命令)退出时,包括后台进程。这不包括内置函数(它们不是子进程),但它确实可以在脚本中使用。
如何在 any 命令完成后 运行 像 echo Done
这样的任意命令?
我希望能够将任何命令放入交互式 shell 中,并在完成后将其发送到 return 相同的命令,即
> pwd
/home/user
Done
> ls
...
Done
> whoami
user
Done
我知道它是否像 cd
这样的特定代码将是:
function cd () {
builtin cd $@
echo Done
}
但是我如何为所有命令执行此操作?
好的,我找到了两种方法:
Bash(来自
PROMPT_COMMAND='echo Done'
ZSH:
precmd() { "echo Done" }
对于bash:
- 如果设置,
$PROMPT_COMMAND
的值将在打印每个提示之前立即执行。 - 可以在 PS0、PS1 和 PS2 中硬引用命令替换,每次打印相应的提示时都会执行这些替换。
- 您可以设陷阱 SIG_CHLD:
trap my-cmd CHLD
。给定的命令将在当前环境中执行,每次子进程(命令)退出时,包括后台进程。这不包括内置函数(它们不是子进程),但它确实可以在脚本中使用。