それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bashのカレントディレクトリがコマンドとして解釈される問題

謎現象が起きた

カレントディレクトリのファイルがコマンドとして実行されてしまう。

takuya@Desktop$ ./a
aaaaaaaaaaaaaaaaaaaaaa
takuya@Desktop$ a
aaaaaaaaaaaaaaaaaaaaaa

bash で、このような動的に変化するPATHを認めてしまうと思いもよらない動作を引き起こすから、カレントディレクトリ( . ) はPATHから除外されてるはずなんだが。

原因を調べた

アレコレしらべてみたけれど原因がなかなかわからなかった。

PATHに :: が含まているとカレントディレクトリとして解釈されるらしい。しらんかった。

takuya@Desktop$ PATH=/bin:/usr/bin
takuya@Desktop$ a
-bash: a: コマンドが見つかりません
takuya@Desktop$ PATH=/bin:/usr/bin::
takuya@Desktop$ a
aaaaaaaaaaaaaaaaaaaaaa
takuya@Desktop$

なんてこったい。

bashrc で:: がPATHに混じっていた。本当に驚いた。

実験したbash

今回ためしたbashはこれ。

takuya@$ bash --version
GNU bash, バージョン 4.4.19(1)-release (x86_64-apple-darwin15.6.0)
Copyright (C) 2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

2018-08-01 追記

バージョン情報を追記