CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure 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 UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes