LinuxOS プロンプトカスタマイズ

# 前置き
こんにちは！
本記事は操作確認等含めたメモ記事です。
LinuxOSを操作してプロンプトの表示を変更してみます。
業務や勉強の参考にしいただければ幸いです。

デフォルトでは下記設定になっていることが多いです。
下記PS1の設定を書き換えることで、自由にプロンプトを変更することが出来ます。
```
# 使用してるシェルの種類を確認
$ echo $SHELL
/bin/bash

# 下記設定を実する(PS1はbashにおいて設定を入れる環境変数)
export PS1='\u@\h:\w\$ '

# 設定結果
これにより、プロンプトが ユーザー名@ホスト名:現在のディレクトリパス$ の形式で表示されます。

# 実行例
taki@dell7178:~/tmp$

taki@dell7178:~/tmp$ pwd
/home/taki/tmp

# 設定の詳細
\u: ユーザー名
\h: ホスト名（最初の部分）
\w: カレントディレクトリのパス
\$: 標準ユーザーなら $、ルートユーザーなら #
```

:::note warn
**注意**
exportコマンドで設定を変更しただけの場合、システム再起動を実施したりシェルを再度読み込ますと設定が失われます。
永続反映させる場合は、.bashrcまたはbash_profileに書き込みましょう
:::

```

# ~/.bashrc や ~/.bash_profile の内容を確認します。
cat ~/.bashrc

# .bashrcへ設定を書き込みます。
export PS1='\u@\h:\w\$ '


# シェル設定ファイルを編集した後は、設定を反映させるためにシェルを再起動するか、以下のコマンドを実行します。
source ~/.bashrc
```
**<追記画面参考画像>**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596363/074507ea-a634-1e62-4a28-077deb342c94.png)


# プロンプトの変更例

さまざまな変更例を残します。

## 1. ユーザー名とホスト名の表示

```
# コマンド
export PS1='\u@\h:\w\$ '
# 結果
taki@dell7178:~/tmp$

\u: ユーザー名
\h: ホスト名（最初の部分）
\w: カレントディレクトリのパス
\$: 標準ユーザーなら $、ルートユーザーなら #
```

## 2.カレントディレクトリの最後の部分のみ表示
```
# コマンド
export PS1='\u@\h:\W\$ '
# 結果
taki@dell7178:tmp$

\W: カレントディレクトリの最後の部分のみ表示
```

## 3.プロンプトに日付や時間を追加
```
# コマンド
export PS1='\d \t \u@\h:\w\$ '
# 結果
Sat Aug 24 02:03:27 taki@dell7178:~/tmp$

\d: 日付（"Tue Feb 22"の形式）
\t: 現在時刻（24時間形式）
```

## 4.色の追加
```
# コマンド
export PS1='\[\e[32m\]\u@\h:\[\e[34m\]\w\[\e[0m\]\$ '

# 結果
taki@dell7178:~/tmp$

\[\e[32m\]: 緑色
\[\e[34m\]: 青色
\[\e[0m\]: 色のリセット
```
**<4.参考画像>**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596363/386be7e4-2c0b-f370-6a15-9a0c4a87568d.png)

## 5.Gitブランチの表示
```
# コマンド
parse_git_branch() {
  git branch 2>/dev/null | grep '*' | sed 's/* //'
}

export PS1='\u@\h:\w$(parse_git_branch)\$ '

# 結果
taki@dell7178:~/tmp(Branch Name)$
```
## 6.エスケープシーケンスを利用したより高度なカスタマイズ
### -1シェルの終了ステータスを表示する
```
# 設定内容
直前のコマンドがエラーで終了した場合に、[error] が赤色で表示されます

# コマンド
export PS1='\u@\h:\w\[\e[31m\]$(if [ $? -eq 0 ]; then echo ""; else echo " [error]"; fi)\[\e[0m\]\$ '

# 結果
taki@dell7178:~/tmp [error]$

使用できないコマンドを実行することでプロンプトおしりに[error]を赤字で表示
正常なコマンドが実行されるまで[error]は表示される
正常なコマンドを実行すると自動で消える
```
**<参考画像>**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596363/713c131b-fe71-aceb-44a9-3500e1340565.png)

### -2シェルの終了ステータスを表示
```
# コマンド
export PS1='$(if [ $? -eq 0 ]; then echo "\[\e[32m\]✔"; else echo "\[\e[31m\]✘"; fi)\[\e[0m\] \u@\h:\w\$ '

#結果
✔ taki@dell7178:~$

使用できないコマンドを実行することでプロンプト先頭に✘を赤字で表示
正常なコマンドが実行されるまで✘は表示される
正常なコマンドを実行するとプロンプトの先頭に✔が表示される
```
**<参考画像>**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596363/5ab27790-0f95-0244-0bba-cd2795271e4c.png)

### -3プロンプトにカウントダウンタイマーを追加
```
# コマンド
SECONDS=0
export PS1='\u@\h:\w $(printf "[%02d:%02d]" $((SECONDS/60)) $((SECONDS%60)))\$ '

# 結果
taki@dell7178:~ [00:00]$

シェルでの作業をタイムトラッキングしたい場合に便利
シェルが開いてからの経過時間を MM:SS 形式で表示します
```

### -4ユーザーの権限によるプロンプトの色分
```
# コマンド
if [ "$UID" -eq 0 ]; then
  export PS1='\[\e[1;31m\]\u@\h:\w\$\[\e[0m\] ' # ルートユーザーの場合、赤色で表示
else
  export PS1='\[\e[1;32m\]\u@\h:\w\$\[\e[0m\] ' # 標準ユーザーの場合、緑色で表示
fi

# 結果
taki@dell7178:~$

ルートユーザーと標準ユーザーでプロンプトの色を自動的に変えることで、どのユーザーで作業しているかを明確にします
```

### -5 背景プロセスの数を表示
```
# コマンド
export PS1='\u@\h:\w [Jobs: \j]\$ '

# 結果
taki@dell7178:~ [Jobs: 0]$

\j: バックグラウンドプロセスの数
シェル内でバックグラウンドプロセスを管理しやすくするために、現在のバックグラウンドプロセスの数を表示します。
```

### -6 タイムスタンプの追加
```
# コマンド
export PS1='[\t] \u@\h:\w\$ '

# 結果
[02:36:22] taki@dell7178:~$

\t: 現在時刻を HH:MM:SS 形式で表示
コマンドを実行した時間をプロンプトに表示します。
```

### -7 シェル内のディレクトリ階層をカラフルに表示
```
# コマンド
export PS1='\[\033[01;34m\]\w\[\033[00m\]\$ '

# 結果
~/tmp/test$

ディレクトリ階層を青色で表示
階層が深いディレクトリ構造の中で作業しているときに便利
```

以上カスタマイズでした。