Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

bashからzshに移行したときのメモ

More than 3 years have passed since last update.

特にこだわりはないのですが、bashを使い続けていた自分に疑問を感じ、zshに冒険してみることにしました。幸いにもhomebrewで導入できるようですし、設定ファイルも共存できるようなので(もとの.bash_profileを書き換える必要もない)、試してみます。zshを使いながら自分のスキルの向上を望むばかりです(笑

zsh

zshはbashの拡張版らしく、コマンドの補完機能等がbashよりも発達しているようです。macではターミナルの画面分割なども可能になるようです。(このあたりは大雑把で)

導入

zshはhomebrewで導入します。

brew install zsh

ではzsh本体を、

brew install zsh-completions

ではzshのコード補完機能を導入できます。私の環境では

/usr/local/Cellar/zsh

以下にインストールされました。この際、後者のインストールにおいて

To activate these completions, add the following to your .zshrc:

  fpath=(/usr/local/share/zsh-completions $fpath)

You may also need to force rebuild `zcompdump`:

  rm -f ~/.zcompdump; compinit

Additionally, if you receive "zsh compinit: insecure directories" warnings when attempting
to load these completions, you may need to run this:

  chmod go-w '/usr/local/share'

と注意されるので、言われたとおりに実行しておきます。

この次にすべきことは、zshをシェルとして登録し、デフォルトにすることですね。それには

sudo vi /etc/shells

から、以下のように最終行(11行目)に追加します。このファイルはrootじゃないと書き込み保存できないので、sudoで編集する必要があります。

  1 # List of acceptable shells for chpass(1).                                  
  2 # Ftpd will not allow users to connect who are not using
  3 # one of these shells.
  4 
  5 /bin/bash
  6 /bin/csh
  7 /bin/ksh
  8 /bin/sh
  9 /bin/tcsh
 10 /bin/zsh
 11 /usr/local/bin/zsh 

このあとで

chsh -s /usr/local/bin/zsh

を実行してやれば、デフォルトにzshが設定され、bashとはおさらばです...

[コメント] インストール先とzshのディレクトリが異なるのは, エイリアスが/use/local/bin/zshに作られるためです。

権限エラーの対処

このままだと、ターミナルを立ち上げると

Ignore insecure directories and continue [y] or abort compinit [n]? y

と注意されてしまいます。zshの管理フォルダがinsecureになっているためですね。そのためにcompauditを実行して、insecureなディレクトリを探します。私の環境では

/usr/local/share/zsh/site-functions
/usr/local/share/zsh

がinsecureだったので、

chmod 755 /usr/local/share/zsh/site-functions
chmod 755 /usr/local/share/zsh

を実行して権限を変更しました。

.zprofile と .zshrc の設定

次に、.zprofileと .zshrcの設定をします。詳しくは記事の最後に挙げた参考記事を参照ください。

.zprofileについてはシンプルに

cat .bash_profile >> .zprofile

とそれまで使っていた内容を丸写ししました。
.zshrcについては、少し凝った.zshrcを使わせていただきました。導入したばかりなので、詳しい内容はまたの機会ということで。。。

その他メモ

Homebrew

とりえあえずちゃんと動いているか確認しました: brew doctor. そしたらパスが通っていなかったようで

 echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc

と実行しました。(もともとの.bash_profileに追加していなかっただけかもしれませんが)

ROOT

ここで挙げているROOTというのは管理者権限のrootのことではなく、CERN(欧州原子核研究機構)で主に開発が進められているデータ処理ソフトのことです。起動のたびに

export BREWSYS=/usr/local/Cellar
source $BREWSYS/root/5.34.36_2/libexec/thisroot.sh

[2017/04/07現在のバージョン]
を実行しないといけないので、.bash_profileに登録していたのですが、これがまた

ERROR: must cd where/root/is before calling . libexec/thisroot.sh for this version of bash!

とエラーを吐いてしまいました。調べたところ

 31 if [ "x${BASH_ARGV[0]}" = "x" ]; then
 32     if [ ! -f libexec/thisroot.sh ]; then
 33         ROOTSYS="$PWD"; export ROOTSYS
 34     elif [ -f ./thisroot.sh ]; then
 35         ROOTSYS=$(cd ..; pwd); export ROOTSYS
 36     else
 37         echo ERROR: must "cd where/root/is" before calling ". libexec/thisroot.sh" for this version of bash!
 38         ROOTSYS=; export ROOTSYS
 39         return 1
 40     fi
 41     ROOTSYS="$PWD"; export ROOTSYS
 42 else
 43     # get param to "."
 44     thisroot=$(dirname ${BASH_ARGV[0]})
 45     ROOTSYS=$(cd ${thisroot}/.. > /dev/null;pwd); export ROOTSYS
 46 fi

と編集すれば良いようです。こうすればzshでもちゃんと動くようになります。

さぁzshを使いこなせるようにがんばろう!(笑

参考にした記事

以下の記事を参考にさせていただきました。ありがとうございました。
とりあえずZshを使えば良いんだろう?
[ROOT-7706] thisroot.sh not working properly for zsh
macでzshでzsh compinit: insecure directoriesの警告が出る問題

hiroyuki827
SDET 興味ある言語: Python, JavaScript その他興味: メインフレーム, Zowe, VSCode Plugin Development Certified Jenkins Engineer取得 *おことわり* Qiitaでの投稿内容は私自身の見解であり、所属会社の立場、戦略、意見を代表するものではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away