2016-05-27 88 views
1

到目前爲止,我一直只使用在.bashrc文件中定義的別名和函數,但現在我需要知道如何配置一個函數以在每個命令之前/之後運行。我怎樣才能實現它?配置一個動作在每個用戶輸入上執行

+0

PS1用於命令之前,PROMPT_COMMAND用於之後 – 123

回答

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="[email protected]\h \$" 

因此,典型的[email protected] $提示,但用戶名動態縮短,如PROMPT_COMMAND函數中所述。

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 
相關問題