色付きのテキストをエコーし​​、色を動的に変更します。

色付きのテキストをエコーし​​、色を動的に変更します。

グリーティングの色が変わるいくつかのお祝いカードのように、色を動的に変更し続ける(指定された時間間隔の有無にかかわらず)、コンソールにカラーテキストを印刷する方法はありますか?

以下を使用してカラーテキストを印刷する方法を知っています。

echo eg: echo -e "\e[1;34m Hi dude, Welcome to the Matrix \e[0m" 

しかし、私はこのテキストの色が変わり続けたいと思います。

実際に可能ですか?

ベストアンサー1

色を繰り返し変更する指示があるテキストは印刷できません。あなたできる次のように、元のテキストの上に別の色でテキストを作成します。

i=0
while true
do
    echo -en "\r\e[1;3${i}mWelcome to the Matrix\e[0m"
    i=$(((i+1)%8))
    sleep 0.25
done

これにより、すべての明るい色が循環しながら毎秒4回変わります。\rカーソルを行の先頭に戻すキャリッジリターン文字は、出力のecho -n終わりに改行文字を抑制します。

これは単一ラインと出力の最後のラインでのみ機能します。さらに進むために、別のエスケープセットを使用することもできます。\e[3Aカーソルを3行上に移動してテキストを書き換えることができます。

i=0
while true
do
    echo -e "\e[0;3$(((i+1)%8))mHello!\e[0m"
    echo -e "\e[1;3${i}mWelcome to the Matrix\e[0m"
    i=$(((i+1)%8))
    sleep 0.25
    echo -e "\e[3A"
done

これにより、2行が異なる色で作成され、両方が常に変更されます。

これらはすべてANSIエスケープコード、そしてたくさんあります。よく使う場合は、このようなライブラリ呪い役に立つかもしれません。tputまた、便利なツールであり、生のエスケープコードを使用するよりも移植性が優れています。元のコードを使用すると、B / C / Dは下/右/左です。

したがって、絶えず変化するテキストを無限に「そのまま」置くことは不可能です。プロセスをバックグラウンドに置くか、そうでない場合は、特定のテキスト&部分が無期限に保持されるように注意深く許可できます。カーソルを正しい位置に移動し、テキストを書き換えてから再度移動できます。最終目標が何であるかによって役立つ例は次のとおりです。Bashプロンプトハウツーの「時計」デモ。とたくさんタスクとコラボレーション端末エミュレータを使用すると、テキストを適切にスクロールするのに十分な情報を得ることができますが、実際にはそれほど価値がありません。

厳密には、「バックエンド」と呼ばれる場所で実行される「点滅」コードがあることに注意してください。技術的には色の変化だと仮定します。<blink>ラベルのように機能し、しばしばテキストを表示または非表示にします。普遍的にはサポートされていません。 Konsole、xterm、Linuxコンソール、およびApple端末はこれを実装しますが、他のシステムは通常は実装しません。とにかくコード5です。

おすすめ記事