0

我想定义一个提示,用颜色指示命令是否正确执行以及是否找到命令。至于现在我有这样的东西,但我不能正常工作。

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 start 上收到此错误:

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

2 回答 2

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 提示来指导您。是一个很好的例子。

于 2012-12-14T10:27:50.663 回答
0

您可能不应该$?\$\?. 看起来它是按字面意思解释的。

您还可以查看Arch Wiki文章,该文章展示了如何实现与您想要的类似的东西。看看这一行:

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

特别是这部分:

([[ \$? != 0 ]] && echo \"\[\033[01;31m\]:(\[\033[01;34m\] \")
于 2012-12-14T10:14:26.360 回答