web-dev-qa-db-ja.com

シェルで制御文字(^ C、^ D、^ [、...)を異なる方法で表示する方法

シェルに制御文字を入力すると、いわゆる「キャレット表記」を使用して制御文字が表示されます。たとえば、エスケープは^[キャレット表記。

私はbashシェルをカスタマイズして、見栄えを良くしたいと思っています。たとえば、私はPS1およびPS2色付けされます。今度は、コントロールキャラクターに独特の外観を持たせて、通常のキャラクターとより区別できるようにしたいと思います。

$ # Here I type CTRL-C to abort the command.
$ blahblah^C
          ^^ I want these two characters to be displayed differently

シェルでコントロールキャラクターを別の方法で強調表示する方法はありますか?

太字で表示したり、通常のテキストとは異なる色で表示したりできますか?

ここではbashシェルを使用していますが、質問にbashのタグを付けていません。

制御文字の強調表示がどのレベルで行われるかわかりません。私はそれがシェル自体にあると最初に思った。 readlinebash。したがって、質問にはreadlineのタグが付けられましたが、私はまだ回答を探しています。

13
wefwefa3

通常、このコードは.bashrcファイルにあります。

function get_exit_status()
{
        local code=$?
        if [ $code -ne 0 ]
        then
                printf $'\001\033[31m\002'"($code)"$'\001\033[0m\002'" "
        fi
}

そして、私は私のPS1でこの関数を呼び出します

PS1='\u@\h \w $(get_exit_status)'

これにより、^ Cを押すと、プロンプトに表示されます

I@mycomputer ~ ^C
I@mycomputer ~ (130)

「0」以外のすべての終了ステータスコードが要求されます。

3
toed