一般的に、LinuxサーバーまたはDockerコンテナーについて話すときは、通常、コマンドラインインターフェイス、シェル、またはターミナルエクスペリエンスを意味します。コミュニティで広く使用されているシェルは、BashとZshの2つです。 Bashは、最も広く使用されているシェルと見なされています。同時に、ZシェルまたはZshは最近ますます人気が高まっています。では、どの端末を選ぶべきですか?この記事では、BashとZshを比較し、どちらの端末が優れているかという質問に答えようとします。
Bashシェル(Bourne Again Shell)は、Bourne Shellに代わるものとして1989年に導入され、すぐにデフォルトのLinuxシェルになりました。 Bashは、Linuxで幅広いプログラミングソリューションと自動化されたタスクを実行できますが、使用できるシェルはそれだけではありません。 Bashと同様の機能を実行できるシェルは他にもいくつかあります。
それらの1つはZshで、これはBash、ksh、およびtcshの多くの追加機能を備えた拡張Bourneシェルとして1990年に作成されました。 Linuxユーザーの場合、Zshはほとんどすべての最新のディストリビューションにデフォルトで含まれているため、個別にインストールする必要はありません。 BashとZshはいくつかの機能を共有していますが、これらのシェルの間にも多くの違いがあります。これについては、この記事で説明します。この記事では、次のセクションについて説明します。
- 機能比較表
- 端末のUXの比較
- BashとZshの違いのリスト
それでは、この記事の最初のセクションに進みましょう。
このパートでは、最も重要な違いについて説明します。
Zsh | バッシュ |
多くの高度な機能が含まれています。 | 高度な機能は含まれていません。 |
より複雑な構成ファイル構造があります。 | 構成ファイルの構造は単純です。 |
構成とカスタマイズはOhMyZshフレームワークによって提供されます。 | 構成とカスタマイズはBash-itによって提供されます。 |
コマンド履歴はすべてのシェルで共有されます。 | 履歴の共有は困難です。 |
Zshスクリプトはそれほど広く使用されていません。 | Bashスクリプトは広く使用されています。 |
ZshはSHELLOPTS をロードしません 起動中。 | SHELLOPTS 起動時に読み込まれます。 |
zshrc を使用すると、環境構成をよりカスタマイズできます。 、zlogin 、zshenv 、zlogout 、zprofile 。 | 環境はカスタマイズ性が低く、少ないスクリプトで実装できます。 |
ファイル内の任意の場所で拡張エイリアスを使用できます。 | Bashはデフォルトで拡張エイリアスをサポートしていません。 |
zparseopts スクリプトの引数の解析が非常に簡単になります。 | getopts を使用したスクリプト引数の解析 もう少しやりがいがあります。 |
端末の計算は、zcalc を使用して実行できます。 。 | 2つの外部計算機を使用する必要があります:bc およびexpr 。 |
端末設定/自動起動スクリプトは~/.zshrc から読み込まれます ファイル。 | 端末構成/自動開始スクリプトは~/.bashrc からロードされます ファイル。 |
bindkey キーのバインドに使用されます。 | bind 組み込みおよび~/.inputrc キーバインディングに使用されます。 |
派手なプロンプトを作成するためのその他のオプション。 | 派手なプロンプトのオプションが少ない。 |
setopt シェル設定を担当します。 | shopt シェル設定を構成します。 |
# INTERACTIVE_COMMENTS でない限り、コメントとは見なされません 設定されています。 | # コメント文字列を表します。 |
拡張ワイルドカードパターンはデフォルトで有効になっています。 | shopt -s extglob を使用します 拡張ワイルドカードパターンを有効にします。 |
変数値を変換するその他の方法(パラメーター展開)。 | 変数を変換するためのメソッドが少なくなります。 |
オートコンプリートとスペル修正機能が組み込まれています。 | bash-completion を使用する必要があります パッケージ。 |
より多くのプラグインとテーマが利用可能です。 | 利用できるプラグインとテーマが少なくなります。 |
Zshはよりカスタマイズ可能です。 | Bashはあまりカスタマイズできません。 |
emulate sh の場合はPOSIX互換 設定されました。 |
--posix の場合は、POSIX標準に従います。
コマンドラインオプションが設定されました。 |
オートコンプリートの動作が速くなります。 | オートコンプリートの速度が遅くなります。 |
小規模なコミュニティ | より広いコミュニティ |
Bash vs Zsh –インターネット検索ボリューム
これは、両方のシェルの検索ボリュームの比較を示すGoogleTendsチャートです。
Bash vs Zsh – UX
このセクションでは、日常的に使用する最も一般的に使用されるUXシェル機能を確認します。
次の例をテストしたいだけの場合、これを行う最良の方法は、UbuntuDockerコンテナを起動することです。
docker run -it ubuntu:20.04 /bin/bash
DockerコンテナにはデフォルトでZshがインストールされていないため、最初にインストールする必要があります:
apt-get update
apt-get install -y zsh
最後に、zshシェルを起動できます:
zsh
Tab
ZshとBashのキーの使用法は少し異なります。この例を説明するために、ネストされたディレクトリをいくつか作成しましょう。
mkdir -p onedrive/docs
mkdir -p onedrive/pics
Bashでは、Tab
を使用する必要があります キーを押して、ディレクトリまたはファイルへのパスをオートコンプリートします。
たとえば、 oneと入力します 、次にTab
を押します 、タイプ d Tab
を押します ターミナルでパスを確定するためにもう一度:
cd onedrive/docs
期待される結果は次のようになります:
Zshでは、Tab
の使用法 キーを押すと、選択可能なオプションのリストが表示されます。
oneと入力します Tab
を押します 、次にTab
を押します 必要なディレクトリを何度でも選択してください:
スペル修正機能は、ZshシェルとBashシェルの両方でサポートされています。ただし、Zshはそれをより効果的に行います。
以下の例では、ZshとBashがスペルを自動的に修正できるようにする方法を学習します。
onedrive
という名前のディレクトリを作成しましょう 、記事の前の部分でそれをしなかった場合:
mkdir -p onedrive
それでは、Bashシェルコマンドでタイプミスをしてみましょう:
cd onedrave
Bashシェルは「dra」の入力ミスを修正しません ve」から「dri ve」と表示され、「そのようなファイルまたはディレクトリはありません。」というエラーが表示されます。 」
bashで自動スペルチェック機能を有効にするには、Bash構成を編集する必要があります。
nano ~/.bashrc
ファイルの最後に次の行を追加します。
shopt -s cdspell
source
を使用する シェルに変更を適用するコマンド。
source ~/.bashrc
スペルミスのあるコマンドを再実行してください。 Bashターミナルはタイプミスを自動的に修正しました:
cd onedrave
Zshはどうですか?
「echo」コマンドのスペルを間違えて、Zshが自動的に検出して修正するかどうかを確認します。
ehco "Hello World"
予想どおり、Zshはスペルを修正しませんでした。
ここで、Zsh構成にいくつかの変更を加えます。
nano ~/.zshrc
correctexport
をオンにします シェルのオプション。プロンプトメッセージを指定することもできます:
setopt correct
export SPROMPT="Correct %R to %r? [Yes, No, Abort, Edit ]"
ファイルが空であっても心配しないでください。問題ありません。後でOhMyZshをインストールするとすぐに、追加の構成が入力されます。
Dockerコンテナでフォローしている場合は次のようになります。
source
を実行します シェルに変更を適用するコマンド。
source ~/.zshrc
スペルミスのecho
を実行します もう一度コマンド:
ehco "Hello World"
どうぞ!
自動スペルチェックが有効になりました:
BashまたはZshのテーマとカスタマイズを使用できるようにするには、Gitをインストールする必要があります。
apt-get install -y git
Bashシェルのカスタマイズをインストールするには、次のコマンドを使用します。
git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
インストールプロセスは非常に簡単です:
~/.bash_it/install.sh
これで、~/.bashrc
を編集できます Bashテーマを編集するファイル:
nano ~/.bashrc
BASH_IT_THEME
を変更します テーマバンドルに存在する任意のテーマの可変値。たとえば、 envyを試してください。 。
変更を適用するには、次のコマンドを実行します。
source ~/.bashrc
それでは、Zshをカスタマイズしましょう。
前述のように、Oh My Zshフレームワークは、多くの便利な機能と広範なテーマコレクションを提供します。
Oh My Zshのインストールもそれほど難しくありません:
apt install -y curl wget git
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Yと答えるだけです すべての質問に答えると、デフォルトで美しいシェルのカスタマイズが可能になります:
現在、Zshテーマは次の場所にあります:~/.oh-my-zsh/themes
フォルダ:
ls ~/.oh-my-zsh/themes/
ここでは、バンドルに含まれているテーマの名前を確認できます。
Zshのデフォルトのテーマは「robbyrussell 「。このテーマを変更するには、ZSH_THEME
を更新します ~/zshrc
の変数値 ファイル:
nano ~/.zshrc
次に、ZSH_THEME
を編集します 端末の新しいテーマを設定するための変数値。 UXの例のリストは次のとおりです。
変更を適用するには、source
を使用します コマンド:
source ~/.zshrc
ファイル名は、ワイルドカードと一致させるために使用されます。 Bashにはこの組み込み機能がありますが、Zshの場合は、グローバルサブセットを設定してワイルドカード拡張を有効にする必要があります。
いくつかの.txt
を作成しましょう Bashのファイル:
touch text_file1.txt
touch text_file2.txt
ls
これで、.txt
を一覧表示できます。 変数でワイルドカード式を使用するファイル:
files="*.txt"
echo $files
Zshでは、このようなアプローチはデフォルトでは機能しません:
touch text_file1.txt
touch text_file2.txt
ls
file="*.txt"
echo $file
set -o GLOB_SUBST
file="*.txt"
echo $file
現在、ワイルドカード式が機能しています!
このオプションを~/.zshrc
に配置します 、今後もこのようなZshの動作を維持したい場合:
set -o GLOB_SUBST
ZshとBashはどちらも、多くの拡張機能と構成オプションを備えた非常に強力なシェルです。 Zshには、堅牢なカスタマイズ、拡張性、および高度な機能があります。 Bashはさらに広く使用されているため、スクリプトと、管理する必要のある他のシステムとの下位互換性について考えてみてください。
私の個人的な選択は、個人のラップトップに関してはZshであり、サーバー管理活動に関してはBashです。
この記事がお役に立てば幸いです。もしそうなら、私たちがそれを世界に広めるのを手伝ってください!