我想定义一个提示,它会用颜色指示命令是否正确执行以及命令是否已找到。至于现在我有类似的东西,但我没有正常工作。
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
答案 0 :(得分: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就是一个很好的例子。
答案 1 :(得分: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\] \")