CTC 教育サービス
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes
前回は定義済みのシェル変数について説明しました。今回はその変数の中でもlocaleとプロンプト変数PS1~4について説明しようと思います。
ロケールは、localization(コンピュータソフトウェアを現地語環境に適合させること。l10nと書くこともあります)を実現させるためのOSの仕組みです。WSLでも各種言語環境に変更させることができます。日本語環境に設定する手順については第3回で説明したと思います。
現在のロケール設定を確認するには、locale コマンドを使用します。
$ locale
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE=ja_JP.UTF-8
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME=ja_JP.UTF-8
LC_COLLATE=ja_JP.UTF-8
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES=ja_JP.UTF-8
LC_PAPER="ja_JP.UTF-8"
LC_NAME=ja_JP.UTF-8
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT=ja_JP.UTF-8
LC_IDENTIFICATION=ja_JP.UTF-8
LC_ALL=各変数意味は以下のとおりです。
| シェル変数 | 説明 |
|---|---|
| LANG | LC_*より優先されるロケール |
| LANGUAGE | 「:」 区切りのロケールのリスト |
| LC_CTYPE | パス名展開、パターンマッチに使用されるロケールを指定 |
| LC_NUMERIC | 数字のフォーマットに使用するロケールカテゴリを指定 |
| LC_TIME | 日付表示の際のロケールを指定 |
| LC_COLLATE | パス展開結果をソート順序を決めるためのロケールを指定 |
| LC_MONETARY | 金額に関連する数値の表示方法を指定 |
| LC_MESSAGES | $の後に続く""で囲まれた文字列のロケールを指定 |
| LC_PAPER | 標準的な紙のサイズの寸法を指定 |
| LC_NAME | 人に呼びかける際に使用されるフォーマットを指定 |
| LC_ADDRESS | 場所や地理関連の項目の表示に使用されるフォーマットを指定 |
| LC_TELEPHONE | 電話サービスで使用されるフォーマットを指定 |
| LC_MEASUREMENT | ロケールの測定系(メートル法かフィート単位系か)に関連する設定を指定 |
| LC_IDENTIFICATION | ロケールのメタデータに関連する設定を指定 |
| LC_ALL | 設定されると、変数LC_* とLANGに優先して使用されるロケール |
これらの値については、概ねLC_ALLもしくはLANGで上書きできます。
また、一時的なロケールの変更は以下のようにenvコマンドでLC_ALLなどを環境変数として指定して実行することで可能です。
$ ls -l
合計 0
drwxrwxr-x 1 s-miyaza s-miyaza 4096 4月 27 20:38 fontpatcher
drwxrwxr-x 1 s-miyaza s-miyaza 4096 4月 27 22:28 tmux
$ env LC_ALL=C ls -l
total 0
drwxrwxr-x 1 s-miyaza s-miyaza 4096 Apr 27 20:38 fontpatcher
drwxrwxr-x 1 s-miyaza s-miyaza 4096 Apr 27 22:28 tmux
最初のls -lでは現在のロケールja_JP.UTF-8で、次のenv LC_ALL=C ls -lでは、ロケールをC(基本のロケール)で実行しているため、表記が英語になっている事がわかります。
プロンプトとは、bash実行時に表示される文字列です。初期値では、「ユーザ名@ホスト名:ディレクトリ$ 」となっていると思います。これらは、特殊なシェル変数によって設定されます。
| 変数名 | 説明 |
|---|---|
| PS1 | プライマリのプロンプト文字列 |
| PS2 | セカンダリのプロンプト文字列 |
| PS3 | select コマンドのプロンプト |
| PS4 | 実行トレース中に bash が表示する各コマンド前に出力 |
| PROMPT_COMMAND | コマンド列を指定すると、PS1を出す前に毎回コマンドとして実行される |
| PROMPT_DIRTRIM | 0 より大きい値が設定されると、 プロンプト文字列のエスケープシーケンス \w や \Wを展開するときに、ディレクトリがパス名の最後からこの数だけ残る。 |
プロンプトに設定するものとして、通常の文字列の他にエスケープシーケンスを設定できます。
| エスケープシーケンス | 説明 |
|---|---|
| \a | ASCII のベル文字 (文字コード 07) |
| \d | "曜日 月 日" という形式の日付 (例: "Tue May 26") |
| \D{format} | format が strftime(3) に渡され、 その結果がプロンプト文字列に挿入される。 format が{}(空)の場合には 、 ロケールで指定された時刻表記になる。 |
| \e | ASCII のエスケープ文字 (文字コード033) |
| \h | ホスト名のうち最初の「.」までの部分 |
| \H | ホスト名 |
| \j | シェルによって現在管理されているジョブの数 |
| \l | シェルの端末デバイスのベース名 (basename) |
| \n | 改行 (newline) |
| \r | 復帰 (carriage return) |
| \s | シェルの名前。つまり $0 のベース名 (最後のスラッシュ以降の部分) |
| \t | 24 時間制の HH:MM:SS 形式の現在の時刻 |
| \T | 12 時間制の HH:MM:SS 形式の現在の時刻 |
| \@ | 12 時間制の am/pm 形式の現在の時刻 |
| \A | 12 時間制の HH:MM 形式の現在の時刻 |
| \u | 現在のユーザのユーザ名 |
| \v | bash のバージョン (例: 2.00) |
| \V | bash のリリース。バージョンにパッチレベルを加えたもの (例 : 2.00.0) |
| \w | 現在の作業ディレクトリ。 $HOME の部分はチルダに短縮される<br />変数PROMPT_DIRTRIM の値が適用される。 |
| \W | 現在の作業ディレクトリのベース名 $HOME の部分はチルダに短縮される |
| \! | このコマンドの履歴番号 |
| \# | このコマンドのコマンド番号 |
| \$ | UID が 0 の場合に #、 それ以外の場合は $を表示 |
| \nnn | 8進数 nnn に対応する文字を表示 |
| \ | バックスラッシュ |
| \[ | 非表示文字のシーケンスの開始。 これを使うと、プロンプト中に端末の制御シーケンスを埋め込むことができます。 |
| \] | 非表示文字のシーケンスを終了します。 |
WSLでのPS1の初期値は、'${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' となっています。
上記のEscapeシーケンスを元にして、好きな文字列をプロンプトに設定することできます。永続的にPS1を指定したい場合は、.bashrc にPS1を記述してください
今回は、ロケールの概念とbashのプロンプトについて説明しました。PS2~PS4の使い方については後日説明しようと思います。
次回はエスケープシーケンスについて簡単に説明しようと思います。次回をお楽しみにお待ち下さい。
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes