配置要对每个用户输入执行的操作

时间:2016-05-27 13:43:44

标签: bash shell unix terminal cygwin

到目前为止,我一直只使用在.bashrc文件中定义的别名和函数,但现在我需要知道如何配置一个函数,以便在我生成的每个命令之前/之后运行。我怎样才能实现它?

2 个答案:

答案 0 :(得分:2)

有一个环境变量PROMPT_COMMAND,请参阅the manual

  

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函数中的指定动态缩短。

答案 1 :(得分:0)

这是一个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