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

时间:2011-01-03 14:47:33

标签: bash command-line

我想运行一个命令,例如

echo "foobar";

每个命令后,由用户输入。

两种情况:

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

如何完成上述两种情况?

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

2 个答案:

答案 0 :(得分:15)

正如l0b0建议的那样,您可以使用PROMPT_COMMAND执行第二次请求,而不必触及PS1

要完成第一个请求,您可以trap DEBUG伪信号:

trap 'echo "foobar"' DEBUG

答案 1 :(得分:9)

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

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