如何在每个 bash 命令之后调用脚本

Joh*_*ohn 22 bash

是否可以在此示例中调用以hey.sh每个 bash 命令命名的脚本?

例如,您输入lshit enter 和 ls 运行,然后hey.sh将运行。

然后键入cd .. (或任何其他命令), cd running 然后hey.sh将运行,依此类推。

PSk*_*cik 30

PROMPT_COMMAND+="hey.sh;"
Run Code Online (Sandbox Code Playgroud)

PROMPT_COMMAND 如果设置,该值在发出每个主要提示之前作为命令执行。


注意:环境变量 vs shell 变量

默认情况下,PROMPT_COMMAND不是一个环境变量。它只是一个shell 变量

两种类型的变量都以相同的方式访问 ( "$variable*"),但环境变量由子进程继承,而shell 变量则不然。

约定是大写环境变量+ 配置您的 shell 的 shell 变量(PROMPT_COMMAND 确实配置了您的 shell),但将其他类型的变量保持为小写。

bash 中,您可以执行以下操作:declare -p找出变量是否已导出(= 是环境变量):

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable
Run Code Online (Sandbox Code Playgroud)

  • @John 不。不要“导出”它。只需设置它(或附加到它,例如,如上所示)。 (2认同)
  • @moonbutt74 在每个命令之前 == 在每个命令之后 + 在您的 bash 会话开始时 (2认同)