2012-12-14 20 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\] \")