每次执行命令行时运行bash脚本


9

我是Ubuntu / Linux的新用户,我想问一个问题作为我的标题。

例如,我有一个bash文件./script,我想让它在键入任何命令行时自动运行。一旦我执行了命令行,pwd那么./script将被执行。输入下一个命令行ls -la后,./script将再次执行。


4
我们可以问一下:您打算对每个键入的命令执行哪种操作?并且应该仅适用于以交互方式键入的内容吗?还是脚本中的任何命令?那么在ssh上键入的命令呢?等等。这可能是XY问题
Olivier Dulac

Answers:


13

您需要设置PROMPT_COMMAND变量。来自man bash

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

例如,这将在/tmp/PC每次执行命令时将当前日期写入:

 $ PROMPT_COMMAND="date > /tmp/PC"

1
是的,我明白了。(已投票)
Ender Phan

1
错了 该命令echo $(date)将在声明时运行,因此将始终显示(保存)同一时间。
heemayl

@heemayl:当然,你说得对,我固定它
的Arkadiusz Drabczyk

@lộcphan如果这些答案之一解决了您的问题,请花一点时间,然后单击左侧的复选标记以接受它。这会将问题标记为已回答,并且是在Stack Exchange网站上表达感谢的方式。
terdon

@heemayl:为什么?...
Arkadiusz Drabczyk '16

11

您正在寻找PROMPT_COMMAND环境变量,此变量的值将在终端中给定的每个命令执行完之后,正好显示下一个提示之前作为命令执行。

例如,将其设置为:

export PROMPT_COMMAND='/path/to/script'

首先使脚本/path/to/script可执行。

现在,该脚本将在每个命令之后运行。

只是要注意,如果您不希望导出该变量,即将其设置为shell变量而不是环境变量,请执行以下操作export

PROMPT_COMMAND='/path/to/script'

来自man bash

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.

我知道了,非常感谢您的帮助:)(赞成btw)
Ender Phan

你为什么用export
2016年

@ArkadiuszDrabczyk export将使该变量PROMPT_COMMAND成为环境变量,即该变量将可用于当前外壳程序的所有子进程(例如子外壳程序)。如果只想将其限制在当前的shell会话中(shell变量),请删除export
heemayl

5
@heemayl:IMO export在这里不是一个好习惯- PROMPT_COMMAND只能在交互式shell启动文件中设置,并且在环境中不可见
Arkadiusz Drabczyk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.