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


22

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

例如,您键入lshit enter并运行ls,然后hey.sh运行。

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


2
这要么是一个XY问题,要么是一个很奇怪的想法。您实际上想实现什么?
jasonwryan '16

bash.rc中的别名可能吗?
moonbutt74 '16

Answers:


29
PROMPT_COMMAND+="hey.sh;"

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


注意:环境变量与外壳变量

默认情况下,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

2
@约翰,不是export。只需设置(或附加到它,例如,如上所示)。
PSkocik

整洁,那又如何呢?
moonbutt74 '16

2
在bash会话开始时,在每个命令之前@@ moonbutt74 ==在每个命令之后+ =
PSkocik

@PSkocik我很想知道我是否已经是一个环境变量,我在快速回显命令后就发现了。这不正是我一直在寻找
约翰

@John默认情况下,它只是一个shell变量,而不是环境变量。
PSkocik '16
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.