環境変数のPATHを整形出力で見やすくして、永続化をする方法



# はじめに
この記事は[C3 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/c3) 3日目の記事です。

こんにちは、エイです！

今回は、Linuxで、環境変数のPATHを整形出力で見やすくして、それを永続化をする方法を紹介します！
私は、ubuntu22.04の環境で行いました。 

# 流れ
1. 記事を書いた背景
2. 手順
    1. 設定するためのファイルを探す
    2. シェルの設定をする。(コマンドを書き込む)
    3. シェルの設定を反映
    4. 使ってみる
3. おわりに
4. 参考記事


## 1.記事を書いた背景
　学校の実験や自分が参加しているイベントで、低レイヤーに触れる機会があり、```printenv```を初めて知りました。そして、環境変数のPATHの部分を見たのですが、、見づらい🥺

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954816/a3cfef07-8742-c195-c786-c9a0b87899cc.png)



```echo $PATH```や```printenv PATH```というコマンドを実行して、
環境変数のPATHを表示させてみると分かると思います。
これは「:(コロン)」で区切られています。

見やすいようにしたいなーと思い、
記事を探して実践できたので、今回記事を書きました！
複数ある記事をまとめただけですが、読んでいただけると嬉しいです！


## 2. 手順
### 1. 設定するためのファイルを探す
ホームディレクトリでファイルの一覧を見るために、
以下のコマンドを実行します。
```
ls -a
```
そうすると、```.bashrc```や```.profile ```があると思います。
これらが、今回設定していくファイルになります。

ファイルが無い場合、これらの仲間として、
<br>

```.bashrc```は、```.zshrc```、
```.profile ```は、```.bash_profile```や```.bash_login```などがあるため、
<br>


検索したり、[こちら](https://blog1.mammb.com/entry/2019/12/01/090000)の記事を参考にしたりしましょう。
<br>
<br>


### 2. シェルの設定をする。(コマンドを書き込む)
コマンド自体の設定は、```.bashrc```に書き込みます。

#### PATHの整形表示
```.bashrc```を編集して以下のコマンドを追加しましょう。
(aliasが並んでいるところに記述すると、あとで見返しやすいと思います。)

```
alias mypath='echo $PATH | tr ":" "\n"'
```


```mypath```の部分は、他のコマンドに影響しなければ、
自分の好きな名前に変更できます。

コマンドの内容は以下の通りです。
- **```alias```** : 別名を定義するコマンド
- **```echo```** : 標準出力(コマンドプロンプト上に出力)するコマンド
- **```tr```** : 文字を置き換えるためのコマンド

Linuxのパイプ処理をつかって```echo```と```tr```を実行するコマンドを、
```mypath```という名前で別名定義しています。

そうすると、改行できました！
しかし、環境構築でごちゃごちゃしていたときの残骸が、。

![スクリーンショット 2023-10-18 215229.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954816/c02e76f5-0d2d-0280-508f-959859801647.png)

というわけで、次の項目です！

#### PATH内の重複を無くす
こちらも、```.bashrc```を編集しましょう。
以下のコマンドを```.bashrc```の末尾に追加します。

```
export PATH=$(printf %s "$PATH" | awk -v RS=: -v ORS=: '!arr[$0]++')
```

コマンドの内容は以下の通りです。
- **```export```** : 環境変数を設定・定義・更新するコマンド
- **```printf```** : データを整形して表示するコマンド
- **```awk```** : コマンドライン上で文字列をいろいろ操作できるコマンド

```awk```と```printf```で、
「:」の区切りごとで被っていないものだけを取り出し、
整形出力をし、```export```でそれを設定しています。
<br>
<br>

### 3. シェルの設定を反映
シェルの設定をしましたが、
それを反映させなければ動かすことが出来ません。

すぐに反映させるためには、
以下のコマンドを```.profile ```に記述すれば反映されます。
```
source ~/.bashrc
```
この処理を```.profile ```記述したら、

以下のコマンドだけを実行してみましょう。
```
source ~/.profile
```
**これで反映されたはずです！**
<br>

### 4. 使ってみる
では最後に、
実際に反映されたか確認してみましょう！
私の場合、以下のコマンドを実行すると、
```
mypath
```
以下のように表示されました！
なーんかまだ被ってる…のは、き、気のせいですkit...

```
/home/ray03j/.volta/bin
/home/ray03j/.local/bin
/home/ray03j/.rbenv/shims
/home/ray03j/.rbenv/bin
/home/ray03j/.volta/bin
/home/ray03j/.progate/bin
/home/ray03j/.sdkman/candidates/java/current/bin
/home/ray03j/.local/share/pnpm
/home/ray03j/.nvm/versions/node/v16.15.0/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
…
```
<br>
<br>


# 3. おわりに
この記事が誰かの役に立つことを願っています！

今回この記事を書いて、自分自身もシェルについての理解が深まりました。もし、より良い方法があれば、ぜひ教えていただきたいです！！

[C3AdventCalendar](https://qiita.com/advent-calendar/2023/c3)の他の部員の記事も
見ていただけると嬉しいです！

今回、読んでいただき**本当にありがとうございました！**


# 4. 参考記事
今回参考にさせていただいた記事です！

https://www.bioerrorlog.work/entry/echo-path-human-readable

https://orebibou.com/ja/home/202101/20210104_001/

https://blog1.mammb.com/entry/2019/12/01/090000

https://qiita.com/yamazon/items/563af1b485ff413d381f