試行錯誤ダイアリー

新卒エンジニアが日々の技術的な学び,働き方,日々感じたこと等を書きます

bashからzshに移行したときの問題

bashでいままで使えていたコマンドがzshで使えなくなったときの対策.

コマンドが使えなくなった

今までシェルはmacデフォルトのbashを使っていたんだけれど.「zshがいいよ」って話を聞いて乗り換えた.移行してこれは便利だなっておもっていた矢先,今まで使えていたawsコマンドが使えないことに気づいた.

zsh: command not found: aws

なんで?

chsh -s /bin/bash

で一度bashに戻したら問題なく使えた.

そういえばawscliはpythonのpipでインストールしたなと思って,zshでpythonを実行するとバージョンが2.7だった.PATHの設定の問題だということがわかった.どうやらシェルでは.bash_profile.zsh_profileに設定を記述するみたい.

解決方法

ここで.bash_profileの中身を見ると

# added by Anaconda3 4.3.1 installer
export PATH="/Users/user_name/anaconda/bin:$PATH"

の記述があった.

これを.zsh_profileに追記する.
もしも.zsh_profileが存在しない場合はvi .zsh_profileなどで生成する.

保存して,一度シェルを終了して再度起動するとちゃんとコマンドが使えるようになっていた.解決!

どういうことだったのか

せっかくなので今回のことについて技術的なことを調べてみた.

そもそもシェルってcsh,kshとか他にもあるということを知った.ユーザーはシェルにコマンドを入力してカーネルのプログラムを実行することができる.

少し違うかもしれないけど,データベースをカーネルとするとシェルはSQLクライアントみたいなものなのかもしれない.各クライアントで設定を変更していても,違うクライアントにはその設定はもちろん適用されない.今回はbashで設定はしていたけど,zshには反映されてなかったので実行できなかった(シェルは共通の設定ファイルにアクセスすると思っていたので今回のようなことになった).

シェルは起動時に設定ファイルを読み込み内容を実行する.設定ファイルには profileファイル(bash_profileなど)とrcファイル(bashrcなど)がある.設定の記述はどちらに書いても動くが,読み込みの順番はprofile->rcなので,profileに記述したほうがよさそう.profileは環境的な記述,rcはユーザーの設定関連の記述をするイメージ.

ちなみにrcは”run command”の略らしいです.