如何在从控制台输入的每个Bash命令之前或之后运行一些命令?

ast*_*nic 23 bash command-line

我想运行一个命令,例如

echo "foobar";
Run Code Online (Sandbox Code Playgroud)

在每个命令之后,由用户输入.

两种情况:

  • 当用户输入命令时,应执行我的全局命令,稍后应执行其命令
  • 当用户输入命令时,应该执行他的命令,然后执行我的全局命令

如何完成上述两种情况?

注意:我不想为此目的使用提示,(保留PS1变量).

Pau*_*ce. 15

正如l0b0建议的那样,你可以PROMPT_COMMAND用来做你的第二个请求而你不必触摸PS1.

做你的第一个请求,你可以trapDEBUG伪信号:

trap 'echo "foobar"' DEBUG
Run Code Online (Sandbox Code Playgroud)


l0b*_*0b0 9

对于第二部分,您可以使用declare -r PROMPT_COMMAND="echo 'foobar'":它在显示提示之前执行.请注意,不会为每个命令运行它,例如管道或命令组.

请注意,任何解决方案都有可能使用户陷入困境,因此理想情况下,您应该只调用不输出任何内容的命令(否则任何输出处理几乎是不可能的),并且用户无法使用它们(以避免它们伪造或腐败输出).