開発
cd: no such file or directory
beko
私が管理者権限を持たないUNIX上で自分のホームディレクトリ以下に新たにプログラムをインストールしようとした時のことです。私はプロジェクトの公式ページからインストールするプログラムのソースtarボールをダウンロードしてきてビルドしようとしました。インストールの流れはtarボール展開後、cd(Change
Directory)そしてお馴染みの「./configure; make; make
install」です。この手順の中で、「./configure」は正常に終了するのですが、何故か肝心の「make」が正常に終了しないのです。最初は「./configure」時の認識ミスかと思っていたのですが、エラー文をよく見ると「cd:
no such file or directory:
hoge」と出ています。念のためlsコマンドなどで展開後のディレクトリを確認したのですが、該当ディレクトリはきちんと存在していました。おかしいなと思い、別のプログラムをダウンロードして同様にビルドしてみたのですが同じエラーで止まってしまいました。また、他人の環境でビルドさせてもらったのですが何故か正常にビルド出来ました。となるとこれは自分の環境が特殊で、ビルドに影響がある何かを設定してしまっているから、ということに気がつきました。そしてそれを特定するために「$
env >myenv.txt」などとして、他人と違う部分、もしくは自分だけが特殊な部分を探しました。すると環境変数「CDPATH」が自分の環境でのみ設定されていました。
「CDPATH」とは、名前の通りcd(Change Directory)時に探すディレクトリのパスの設定です。私は「export
CDPATH=${HOME}:..」と設定していました。これはつまりcd時にホームディレクトリ以下と親ディレクトリ以下をシェルの補完に含める、ということです。これを設定していると、カレントディレクトリ上にないディレクトリでも、ホームディレクトリもしくは親ディレクトリ以下に該当するディレクトリがあれば自動的に補完してくれるのです。
そしてこれが「make」実行時に参照されていることが分かりました。つまり「make」時に必要なディレクトリがホームディレクトリもしくは親ディレクトリ以下に存在しないために先ほどのエラーを吐いていたようなのです。これが原因だと分かったので設定ファイルの「CDPATH」の行をコメントアウトし、「$
unset CDPATH」を実行して環境変数「CDPATH」を消去しました。そしてもう一度「./configure; make; make
install」を実行してみたところうまくいきました。
解決策としては環境変数「CDPATH」を設定しないのが一番安全ですが、もしかしたらこの変数にカレントディレクトリである「.」を追加しておいても解決するかもしれません。私はそれほど「CDPATH」にこだわりはなかったので設定しないことで解決しました。
みなさんも自分専用にカスタマイズした環境で何か問題が起こった場合に、そこで挫けて「カスタマイズしたことによって問題が起こったのだから、もう今後はカスタマイズはしない」という風に考えるのではなく、その問題を自分で解決出来るようになればきっと幸せになれるのではないかと思います。
担当:金子(CUIな話なので画像はありません…)