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] ...」で検索して、以下の記事(英語)を見つける。
rvm - Head usage unknown option -1 / -n error. Possibly ruby related - Stack Overflow
bashは大文字と小文字を区別しないため、XAMPPのHEADと他のheadが混同してしまっている(で、$PATH
の最初に記載されている方を利用する)のが問題とのこと。
(zshではこの問題は起きないらしい。大文字と小文字が区別出来てるんだろうね。)
解決策としては2件ほど示されていた(執筆当時)が、コメントを読む限り有力なのは以下。
-
$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:
がおりました。
(後、なんで、JDK2つも入れてるんだ自分。。)
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 によると、
環境変数はプロセス間で勝手に受け継がれるのでログイン時のみ設定すれば十分です。
とあるため、環境変数の記述は .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の変数の取り扱いについて(後、英語についても少し)学べた。
思いのほか、収穫があって良かった。