41 シェルの変更 (bash → zsh) とか考える

このところ少し気になっていることがある。 Mac は Catalina から標準のシェルが zsh になる。 これまでは bash だったから、 新年度の入学生からシェルが変わるということだ。 それで何かこちらの対応が変わることはあるだろうか?

設定ファイルとかどうするのかな。今はどうなっているか知らないのだけど、 少し前の現象数理学科 Mac には .profile というファイルがあって、
.profile
PATH=$PATH:~/bin
export PATH

# MacPorts Installer addition on 2014-03-04_at_11:03:51: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.
という内容であった (後半は MacPorts が加えた内容だね)。

.profile でなくて、 .bash_profile という名前のファイルにすべきだったのでは? と考えなくもない。 そうすれば Anaconda 関係のドタバタを回避出来たのではないだろうか。

それと、最近は /etc/paths.d にファイルを置くのが普通のようだから、
/etc/paths.d/35-macports
/opt/local/bin
/opt/local/sbin
のようなのを作るとか。 MacPorts がこれを採用しない理由は何なのだろう。 (余談だけれど、どういう順番に PATH の設定をするかは、 ファイル名によるのだろうか。XQuartz が /etc/paths.d/40-XQuartz という番号付きのファイルを作っていて、 それで他より順番が前になって PATH の先頭に /opt/X11/bin がある。 上で /etc/paths.d/35-macports としたのは、 それより前にしてみよう、ということだけれど、 この辺は心配し始めると、かなりおっかない。)


それはさておき、zsh を使うことになるユーザーは、 安直にこの内容を .zshrc に書けば良いのだろうか?
cd
cp .profile .zshrc
で良いのかな?

(2019/12/28) .zshrc でなく、 .zprofile にコピーすべき、という意見を見た。 そちらの方が筋が通っているかも (ログイン・シェル用の設定ファイルだから)。


しばらくそれで生活してみよう。

これまで zsh 以外のシェルをログイン・シェルにしてきた人が、 自分のログイン・シェルを /bin/zsh に変更するには、 普通は
$ chsh
として、Shell: /bin/bash となっているところを Shell: /bin/zsh に書き換えれば良いのだけれど、 何も設定していないと、エディターとして vi が起動されるので、 困ってしまう人が多いかな。

今の3年生だと emacs を知っている人が多いので
$ export EDITOR=/usr/bin/emacs
$ chsh
で良いかと思うのだけれど、この辺はユーザーを選びそうだ。 Atom の場合は…簡単には出来ないぞ。

困ったときはマニュアルを読む: man chsh

なるほど、
$ chsh -s /bin/zsh
で OK だ。

まとめ
こうして乗り換え生活を始める
cd
cp .profile .zprofile
chsh -s /bin/zsh
(これで次からターミナルで起動するシェルは zsh になる。 bash と zsh で設定ファイルの書き方が違うところもあるし、 うまく動かない可能性があるが、 その場合は chsh -s /bin/bash で元に戻せば良い。)


余談 私は、日頃は tcsh で生活しているので、bash には疎く (学生の Mac に触るとき、普段と色々違ってもたつくので、 実は結構フラストレーションだったりする)、 シェル・スクリプト (#!/bin/sh で始めることにしている) を書くのは、 あまり得意でない。書くときはいつもネットで検索しながらなのだけれど、 最近余分な情報が増えてきて、検索に苦労するようになった。 「sh $$」とか、初心者はあまり調べそうもないけれど、 ある程度詳しい説明を書くときは必ず書くみたいなキーワードで検索すると良さそう。 以下はそうして見つけたサイトだけれど、書かれたのが結構古いのが、 ある意味でなるほどと思わせる (sh の文法なんて、ん十年変わっていないものね)。

おまけ

先日、csh と tcsh の新旧を勘違いしている発言を聞いた。 言い間違いかもしれないし、そんなのいまさらどっちでもいいことだけれど (現在はインストールされている csh の実体は tcsh だろうし)、 名前と開発時期の整理をしておくと

ここに来ての交代劇かぁ… zsh が開発されてからもうすぐ30年になるのは感無量 (zsh に乗り換えようかな?と思ったけれど、結局ずっと tcsh を使っている)。

桂田 祐史
2020-04-20