到目前为止,我只使用.bashrc
文件中定义的别名和函数,但现在我需要知道如何配置一个函数以在我发出的每个命令之前/之后运行。我怎样才能实现它?
环境变量PROMPT_COMMAND
,见手册
PROMPT_COMMAND
如果设置,则该值被解释为命令 在打印每个主提示符 (
$PS1
) 之前执行。
对于微不足道的情况,请将其设置为别名:
PROMPT_COMMAND='echo "Something"'
对于更复杂的东西,你可以让它调用一个函数:
prompt_command () {
# If username has underscore, shorten to 'a_b'; else just use first letter
un="${USER:0:1}"
if [[ $USER == *?_?* ]]; then
local suff="${USER##*_}"
un+=_"${suff:0:1}"
fi
}
PROMPT_COMMAND=prompt_command
我使用它来修改提示中的用户名,因此在我的.bashrc
其他地方有类似的东西
export PS1="$un@h $"
典型的user@host $
提示符,但用户名会按照PROMPT_COMMAND
函数中指定的方式动态缩短。
这是做同样事情的一个PS4
技巧。假设您想在每个命令之前运行date
命令,则可以PS4
设置为:
PS4='$(date)n'
然后只需在每个命令之前启用跟踪以开始打印日期:
set -x
然后,您可以看到执行每个命令之前出现的日期:
$> set -x
$> tty
Fri May 27 09:57:42 EDT 2016
tty
/dev/ttys004
$> uname
Fri May 27 09:57:48 EDT 2016
uname
Darwin
如果要关闭此功能,只需使用以下方法关闭跟踪:
set -x