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の開始時にこのエラーが発生します:

-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プロンプトがあります。これが1つの良い例です

于 2012-12-14T10:27:50.663 に答える
0

おそらく$?として逃げるべきではありません\$\?。文字通り解釈されるようです。

また、あなたが望むものに似たものを実装する方法を示すArchWikiの記事をチェックすることができます。この行を見てください:

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 に答える