GNU/Linux >> Linux の 問題 >  >> Linux

どちらの端末が優れているか:BashとZsh

一般的に、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を使用すると、環境構成をよりカスタマイズできます。 、zloginzshenvzlogoutzprofile 環境はカスタマイズ性が低く、少ないスクリプトで実装できます。
ファイル内の任意の場所で拡張エイリアスを使用できます。 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です。

この記事がお役に立てば幸いです。もしそうなら、私たちがそれを世界に広めるのを手伝ってください!


Linux
  1. どのLinuxターミナルコマンドを最もよく使用しますか?

  2. Bashでのコマンド置換宣言構文–この2つのうちどちらがより適切な方法ですか??

  3. どのシェルを使用する必要がありますか– Tcsh Vs Bash ??

  1. Bashで文字列を16進数として読み取る方法は?

  2. zsh/bash で大文字と小文字を区別しない Glob

  3. パスの bash 配列から不足しているパスを抽出する

  1. LinuxとWindows:どちらのOSがPCゲームに適しているか

  2. 複数のターミナルウィンドウでBashの履歴を保持しますか?

  3. どのシェルインタープリターがシバンなしでスクリプトを実行しますか?