1. 概要

このチュートリアルでは、コマンドラインからLinuxターミナルで色を変更する方法を説明します。

2. ANSIエスケープコード

ANSIエスケープコードは、端末または端末エミュレータでテキストの動作と外観を操作するために使用される標準化されたコマンドです。

色の変化のパターンは「ESC[ ; m]」。 echo コマンドを使用して、緑の背景に赤い単語「Hello world」を印刷し、色を通常にリセットするスクリプトを作成してみましょう。

#!/bin/sh
RED_ON_GREEN='\033[31;42m'
RESET='\033[0m'
echo "${RED_ON_GREEN}Hello world${RESET}"

「\033」は、ターミナルでESC文字をエンコードする最もプラットフォームに依存しない方法ですが、Linuxでは、参照「\e」を使用することもできます。 さらに、色の設定は決してカプセル化されていないことに注意してください。

その結果、リセットしないと、スクリプトの外にブリードします。これはほとんどの場合望ましくありません。

ウィキペディアでカラーコードの完全なリストを見つけることができます。

3. tputコマンド

ANSIエスケープコードの使用は直接正常に機能します。 ただし、いくつかの欠点があります。 手始めに、背景と前景の同じ色に異なるコードを使用します。 さらに、ESC文字をコーディングしたり、移植できない可能性のある文字参照を使用したりするには、特定のエンコーディングに依存する必要があります。

最後に、それらは単に読みにくく、少し乱雑に見えます。

幸い、別のオプションがあります。 tput コマンドです。これにより、terminfoデータベースにクエリを実行でき、必要なエスケープコードを抽出する便利な方法が提供されます。

前のセクションのスクリプトを再作成してみましょう。

#!/bin/sh
RED_FG=`tput setaf 1`
GREEN_BG=`tput setab 2`
RESET=`tput sgr0`
echo "${RED_FG}${GREEN_BG}Hello world${RESET}"

tputsetaf」は前景色を設定し、「 tput setab 」は背景色を設定し、「 tputsgr0」はすべての設定を端末のデフォルトにリセットします。 0から7までの数字でエンコードされた8つの標準色があります(順番に:黒、赤、緑、黄、青、マゼンタ、シアン、白)。

4. 色以上

ANSIエスケープコードとtputコマンドは、色を変更する以外にも使用できます。 それらの機能の全範囲はこの記事の範囲外ですが、日常のスクリプトで役立つスタイリングオプションを見ていきます。

通常のテキスト、太字のテキスト、および下線付きのテキストを1秒間隔で同じ行に表示するスクリプトを作成してみましょう。

#!/bin/sh
MOVE_UP=`tput cuu 1`
CLEAR_LINE=`tput el 1`
BOLD=`tput bold`
UNDERLINE=`tput smul`
RESET=`tput sgr0`
echo "This is normal text"
sleep 1
echo "${MOVE_UP}${CLEAR_LINE}${BOLD}This is bolded"
sleep 1
echo "${MOVE_UP}${CLEAR_LINE}${UNDERLINE}This is underlined${RESET}"

5. 概要

この記事では、2つの異なる方法でLinuxターミナルの色を変更する方法を学びました。

また、より広範なカーソルとスタイルの操作にそれらを使用する方法も示しました。