Moving to zsh

11月 28, 2021
admin

Apple は macOS 10.15 Catalina のデフォルトシェルを zsh.

このシリーズでは、bash 設定、構成、スクリプトを zsh.

    へ移行した経験を記録します

  • パート1: zsh への移行 (この記事)
  • Part 2: 設定ファイル
  • Part 3: シェルオプション
  • Part 4: エイリアスと関数
  • Part 5: 完了
  • Part 6: zsh プロンプトをカスタマイズ
  • Part 7: 細かい点
  • Part 8: 設定とファイル。 スクリプト zsh

zsh (ジーシェルと発音すると思いますが、ジーシュと言うのも面白いですね) は bash を継承してデフォルトシェルとなります。 bash は Mac OS X 10.3 Panther 以降のデフォルトのシェルです。

このシリーズは、より詳細でトピックに満ちたものに作り変えられ、1冊の本となりました。 他の書籍と同様に、リリース後も更新と追加を行い、適切で使いやすいものにする予定です。 現在、Apple Books Store で注文できます。

なぜ?

macOS にバンドルされている bash バイナリは、これまで長い間、バージョン 3.2 で止まっていました。 bash v4は2009年に、bash v5は2019年1月にリリースされました。 Appleがこれらの新しいバージョンに切り替えない理由は、GPL v3でライセンスされているためです。 bash v3はまだGPL v2です。一方、

zshは「MITライク」ライセンスで、Appleがデフォルトでシステムに組み込むには、より好都合なものとなっているのです。 zsh は長い間 macOS 上で利用可能でした。 macOS 10.14 Mojave の zsh のバージョンはかなり新しく (5.3) 、macOS 10.15 Catalina は現在の zsh 5.7.1.

bash はなくなったのか!

No.

macOS Catalina には Mojave や以前の macOS バージョンと同じ /bin/bash(バージョン 3.2.57) がまだ搭載されています。 この変更は、macOS Catalinaで作成された新規アカウントにのみ適用されます。 Catalina にアップグレードしても、ユーザーのデフォルトのシェルは以前のままです。

macOS や管理システム、Apple やサード パーティのインストーラーにある多くのスクリプトは /bin/bash に依存しています。 もし Apple が macOS 10.15 Catalina、あるいは 10.16 でこのバイナリをヤンクしてしまったら。

Catalina のデフォルト シェルとして /bin/bash を使用しているユーザーは、各ターミナル セッションの開始時に、zsh が現在推奨されているデフォルト シェルであることを示すプロンプトが表示されるでしょう。 もし /bin/bash を使い続けたいのであれば、.bash_profile または .bashrc で環境変数を設定することにより、このメッセージを表示しないようにすることができます。

export BASH_SILENCE_DEPRECATION_WARNING=1

bash の新しいバージョンを自分でダウンロードしインストールすることもできます。 カスタム bash のインストールは別のディレクトリ、通常は /usr/local/bin/bash.

bash はいつまでも残るのでしょうか。

Apple はシェルを切り替えるよう強く勧めています。 これは、Mac OS X 10.3 Panther での最後の切り替えとは異なっており、Apple はデフォルトを bash に切り替えましたが、あなたが tcsh のままであっても特に気にしませんでした。 実際、tcsh はまだ macOS に存在しています。

Apple のメッセージは、/bin/bash の時代が終わりつつあることを私たちに教えてくれるはずです。 おそらくすぐにではありませんが、いずれは 10 年以上前のバージョンの bash をシステム上に維持することは、負債に変わるでしょう。 組み込みのbashは、「Shellshock」脆弱性を緩和するために、2014年にパッチを適用しなければなりませんでした。 ある時点で Apple は、継続的なメンテナンスのコストが高すぎると考えるでしょう。

もうひとつの手がかりは、macOS Catalina に新しいシェルが登場したことです(サポート記事でも触れられています)。 Debian Almquist Shell」dashがシェルのラインナップに追加されました。 dashはPosix標準シェルshの最小限の実装として設計されています。 これまでのところ、(Catalina を含む) macOS では、shbashsh 互換モードで呼び出します。

Apple のサポート記事にあるように、Catalina はユーザーと管理者が sh 呼び出しを処理するシェルを変更する新しいメカニズムも追加しています。 Mac 管理者やユーザーは、/var/select/sh に格納されているシンボリックリンクを変更して、/bin/bash 以外のシェルを指すようにすることができます。 これにより、#!/bin/sh shebang や sh -c で起動されたスクリプトをどのシェルが解釈するかが変更される。 sh のインタプリタを変更することは望ましくないが、システム、管理ツール、インストーラのいくつかの重要なスクリプトの動作を変更するかもしれないが、テスト目的には非常に有用であろう。

これらの変更はすべて、Apple が将来のまだ不確定な時点で /bin/bash を削除する準備をしていることを示す指標です。

Catalina が zsh に切り替えるのを待つ必要がありますか。

いいえ、zsh は Mojave と古い macOS バージョンで利用できます。 zsh のテストを開始したり、デフォルトのシェルを切り替えることもできます。

zsh の動作を確認したい場合は、ターミナルを開いて zsh:

$ zshMacBook%

と入力してください。 zsh はデフォルトのプロンプトとして % 文字を使用します。 (もちろん変更可能です。) ほとんどのナビゲーションキー操作やその他の動作は、bash と同じままです。 このコマンドは現在のシェルを変更するのではなく、すべての新しいシェルを変更するので、現在のターミナルウィンドウとタブを閉じて、新しいものを開いてください。

bash (‘Bourne again shell’) と同様、zsh はシェルの ‘Bourne’ ファミリーから派生しています。 この共通の祖先のため、日常的な使用では非常に似た挙動をします。 最も明らかな変化はプロンプトが異なることである。

bashzsh の主な違いは設定である。 zshbash の設定ファイル (.bash_profile または .bashrc) を無視するので、カスタマイズした bash の設定を単純に zsh にコピーすることはできない。 zsh には、zsh の設定や動作を変更するためのオプションやポイントがより多く用意されています。

zsh はまた、bash よりもはるかに簡単なオートコンプリートのためのより良い設定を提供しています。

スクリプトについてはどうでしょうか。

zsh は長い間 macOS に存在しているので、スクリプトを bash から zsh にすぐに移行しても、下位互換性を失うことはないでしょう。 スクリプトの shebang を #!/bin/zsh に設定することだけは忘れないでください。

zshbash v3 より優れているいくつかの機能、たとえば配列や連想配列 (辞書) を利用できるようになります。 これは、ベータ版またはそれ以降に変更される可能性がありますが、zsh が確実に Recovery に存在しない古い macOS インストールを考慮しなければなりません。

Twocanoes MDS や installr、bootstrappr などの Recovery (または NetInstall、ブータブル USB ドライブ)コンテキストでのインストール スクリプトやパッケージを使用しようとしている場合、/bin/zsh には頼れないのです。

bash が最終的になくなることが分かっているので、残された唯一の一般的な選択肢は /bin/sh です。

インストーラパッケージを構築するとき、それが展開されるかもしれないすべてのコンテキストを予想するのは難しいかもしれません。 そのため、インストール前後のスクリプトには、今後 /bin/sh を使用することをお勧めします。

私は以前、MacAdmin 関連のすべてに /bin/bash を使用することをお勧めしていました。 /bin/sh は確かに機能的には一歩落ちますが、サポートを継続するには最も安全な選択だと思います。

まとめ

全体として、Apple からのメッセージは非常に興味深いものですが、変更自体は見出しほど劇的ではありません。 Apple は、少なくともまだ、bashzsh に「置き換え」ているわけではありません。 全体として、私たちはいくつかのことを再考し、学び直さなければなりませんが、10 年前のシェルから新しいモダンなシェルに最終的に切り替えることで得られるものも多くあります!

Next

次のパートでは、zsh.

の設定ファイルを見ていきましょう。

コメントを残す

メールアドレスが公開されることはありません。