環境変数PATHの整理

# What's Problem
Macのターミナルにて。

自分好みの設定を入れるのに `.bash_profile` や `.bashrc` や色々といじっているのだけれど、ちょっと前から起動時に以下の様な `Unknown option:1` や `head` コマンドのUsageが出る様になった。

```
Last login: Fri Mar 27 09:03:29 on ttys002
~/.bash_profile is read.
~/.bashrc is read.
Unknown option: 1
Usage: head [-options] <url>...
    -m <method>   use method for the request (default is 'HEAD')
    -f            make request even if head believes method is illegal
    -b <base>     Use the specified URL as base
    -t <timeout>  Set timeout value
    -i <time>     Set the If-Modified-Since header on the request
    -c <conttype> use this content-type for POST, PUT, CHECKIN
    -a            Use text mode for content I/O
    -p <proxyurl> use this as a proxy
    -P            don't load proxy settings from environment
    -H <header>   send this HTTP header (you can specify several)

    -u            Display method and URL before any response
    -U            Display request headers (implies -u)
    -s            Display response status code
    -S            Display response status chain
    -e            Display response headers
    -d            Do not display content
    -o <format>   Process HTML content in various ways

    -v            Show program version
    -h            Print this message

    -x            Extra debugging output
```

無論、 `.bash_profile` や `.bashrc` に `head` コマンドを書いた覚えは毛頭ない。
仕方ないので、少し調べてみることにした。

「Usage: head [-options] <url>...」で検索して、以下の記事（英語）を見つける。
[rvm - Head usage unknown option -1 / -n error. Possibly ruby related - Stack Overflow](https://stackoverflow.com/questions/21498991/head-usage-unknown-option-1-n-error-possibly-ruby-related)

**bashは大文字と小文字を区別しない**ため、XAMPPのHEADと他のheadが混同してしまっている（で、`$PATH` の最初に記載されている方を利用する）のが問題とのこと。
（zshではこの問題は起きないらしい。大文字と小文字が区別出来てるんだろうね。）

解決策としては２件ほど示されていた（執筆当時）が、コメントを読む限り有力なのは以下。

* `$PATH`からXAMPPのパスを取り除く or
* `$PATH`の最後にXAMPPのパスを移す

現在の自分の `$PATH` の設定を確認。

```
$ echo $PATH
/Users/***/.nodebrew/current/bin:/etc/httpd:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin:/Applications/XAMPP/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin
```

非常にごちゃついておる。。分かりやすい様に分解すると、

```
/Users/***/.nodebrew/current/bin:
/etc/httpd:
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin:
/Applications/XAMPP/bin:
/usr/local/bin:
/usr/bin:
/bin:
/usr/sbin:
/sbin:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin
```

確かにXAMPPがおります。
記事とは若干フォルダは異なるものの `/Applications/XAMPP/bin:` がおりました。
（後、なんで、JDK２つも入れてるんだ自分。。）


# Resolve
`.bash_profile` と `.bashrc` の設定を見直す。

**修正前**
.bash_profile（$PATH関連の設定に絞って掲載）

```
export PATH=/etc/httpd:$PATH:/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin
export JAVA_HOME=$PATH:/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

.bashrc（$PATH関連の設定に絞って掲載）

```
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v "1.8"`;
PATH=${JAVA_HOME}/bin:/Applications/XAMPP/bin:${PATH};
```

う〜ん、、、何も整理出来てなかったんだな。。
JDKが被ってる理由も同時に判明。良かった。

**修正後**
整理します。[本当に正しい .bashrc と .bash_profile の使ひ分け - Qiita](https://qiita.com/magicant/items/d3bb7ea1192e63fba850) によると、

> 環境変数はプロセス間で勝手に受け継がれるのでログイン時のみ設定すれば十分です。

とあるため、環境変数の記述は `.bash_profile`側に統一する。

.bash_profile（$PATH関連の設定に絞って掲載）

```
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
export NODE_HOME=$HOME/.nodebrew/current
export PATH=${JAVA_HOME}/bin:${NODE_HOME}/bin:/etc/httpd:$PATH
```

.bashrc（$PATH関連の設定に絞って掲載）

```
# 設定なし
```

随分とすっきりした。やったことは以下の通り。

* 記述を `.bash_profile` に統一
* もう使わないので、XAMPPは削除
* JDKのバージョンを一つに固定
* その他、全般的に見やすい様、記述見直し・修正

**動作確認**
一旦、ターミナル自体を落として、再起動。

```
Last login: Fri Apr 10 09:44:23 on ttys004
~/.bash_profile is read.
~/.bashrc is read.
```
警告出なくなったので、一先ず良し。
今回のことで、 `$PATH` 変数やXAMPPの変数の取り扱いについて（後、英語についても少し）学べた。
思いのほか、収穫があって良かった。


# Thanks
* [rvm - Head usage unknown option -1 / -n error. Possibly ruby related - Stack Overflow](https://stackoverflow.com/questions/21498991/head-usage-unknown-option-1-n-error-possibly-ruby-related)
* [本当に正しい .bashrc と .bash_profile の使ひ分け - Qiita](https://qiita.com/magicant/items/d3bb7ea1192e63fba850)