2012-12-14 53 views
0

我想定義一個提示符,用顏色表示命令是否正確執行以及命令是否被找到。至於現在我有這樣的事情,但我不能正常工作。bash腳本命令結果在其他變量裏面定義提示

PS1="\`COMMAND_RESULT=\$\?; 

if [ $COMMAND_RESULT -eq 127 ]; then echo \[\e[33m\] ---=== Command not found ===--- ; 

elif [ $COMMAND_RESULT -ne 0 ]; then echo \[\e[33m\]---=== \[\e[31m\]Oh noes, bad command \[\e[33m\]==---; 

fi\` 

\n\[\e[0;37m\][\[\e[1;31m\]\@\[\e[0;37m\]] 

\[\e[0;32m\]\u\[\033[1;33m\]@\[\033[0;32m\]\h 

至於現在我得到的bash啓動此錯誤:

-bash: [: -eq: unary operator expected 
-bash: [: -ne: unary operator expected 

回答

1

不要職能污染你PS1。你應該使用特殊的PROMPT_COMMAND變量來做到這一點。在發出每個主要提示之前,PROMPT_COMMAND的值作爲命令執行。

下面是一個例子:

_check_command(){ 
    local COMMAND_RESULT=$? 
    if [ $COMMAND_RESULT -eq 127 ] 
    then 
     echo -e "\e[1;33m---=== Command not found ===---\e[m" 
    elif [ $COMMAND_RESULT -ne 0 ] 
    then 
     echo -e "\e[1;31m---=== Oh noes, bad command ===---\e[m" 
    fi 
} 
PROMPT_COMMAND='_check_command' 
PS1="\[\e[0;37m\][\[\e[1;31m\]\@\[\e[0;37m\]] \[\e[0;32m\]\u\[\033[1;33m\]@\[\033[0;32m\]\h " 

有很多的bash提示,你可以在網上找到,引導你。 Here就是一個很好的例子。

0

你可能不應該逃避$?\$\?。看起來像它從字面上解釋。

此外,你可以看看Arch Wiki文章,顯示如何實現類似於你想要的東西。看這句話:

PS1="$(if [[ ${EUID} == 0 ]]; then echo '\[\033[01;31m\]\h'; else echo '\[\033[01;32m\]\[email protected]\h'; fi)\[\033[01;34m\] \w \$([[ \$? != 0 ]] && echo \"\[\033[01;31m\]:(\[\033[01;34m\] \")\$\[\033[00m\] " 

特別是這部分:

([[ \$? != 0 ]] && echo \"\[\033[01;31m\]:(\[\033[01;34m\] \")