バッシュが死んだ、ベイビー*。 ビバzsh

私は、 以前の 講演者から残された落ちたバナーを掲げ、zshを大衆に宣伝するための良い仕事を続けさせます。 トピックを読んだ後、古き良きトピックも変更することを願っていますが、私にとっては、過去にこだわって、より便利で高度なzshにbashしてください。
根拠にならないように、bashとの絶対的に主観的で偏った比較のコンテキストでこの問題を検討してみましょう。 zsh。
私はデスクトップでコンソールのサポーターではないことをすぐに予約します。自宅でLinuxを使用していますが、それでもGUIは人の近くにあります。 したがって、話は、エンドユーザーよりも管理者にとって有用である可能性が高いものについて行われますが、ちなみに誰が知っていますか。

したがって、一般的な管理者の操作:ファイルシステムのナビゲート、ファイルのコピー/削除、ログの表示、構成ファイルの編集、繰り返し操作を自動化するためのスクリプトの適度な使用。 うーん...何も忘れていませんか?
順番に行きましょう。

1.ナビゲーション


バッシュ:
すべての* nix(および* nixでさえない)シェルのクラシック
user@host:/home# cd dir1/subdir1/subdir2
user@host:/home/dir1/subdir1/subdir2#


zsh:
外観は最もシンプルで気取らないですが、同時に私のお気に入りの機能は、 テレパシー autocd 制御モード、つまり、cdを明示的に使用しないディレクトリ間の移行です。 私の経験では、すべてのディストリビューションのすべてのデフォルトzsh構成でデフォルトで有効になっています。
「パスの公開」機能と組み合わせて(つまり、実際にパス全体を覚えているが、入力するのが面倒で、この場合は最初の文字しか入力できない場合)これにより、zshでのナビゲーションが約100万回高速かつ便利になります(by私の計算の最も控えめな)
彼らが言うように、一度見たほうがいいです。
zsh autocd

ナビゲーションについて言えば、オートコンプリートという退屈なテーマを避けることはできません。
Zshのオートコンプリートは大きくて美しいですが、正直なところ、ほとんどが直感的ではないため、bashとは根本的に異なる超洗練されたものは使用していません。 しかし、ファイルをナビゲートするときにオートコンプリートを使用する直感性について話すと、zshは「メニュー」を誇っています。これは、bashと比較して間違いなく大きな一歩です。
結局、タブだけでなく矢印も使用できるようになりました。
そして最も注目すべきことは、これらすべてがローカルだけでなく、リモートホストでも機能することです。

zshメニュー
(メニュー機能、デフォルトでは無効)

しかし、zshでcdを使用するための興味深いオプションがあります(autocdの後、誰かがcdを必要とするかもしれませんが...)
ファイルシステムに次のようなディレクトリ構造があるとします。
  1. /プロジェクト/ project1 / src /バックアップ
  2. /プロジェクト/ project2 / src /バックアップ

そして私たちは最初にいます:
user@host:/projects/project1/src/backup# cd 1 2
user@host:/projects/project2/src/backup#


しかし魔法...

2.ファイルのコピー/削除


バッシュ:
そのようなもの
user@host:/home# rm somelogs201001{12,{14..19},25}.log
(コピーにも同様)
zsh:
上記のbashのオプションに加えて、zshで次の構成を使用できます。
user@host:/home# rm **/*.log
現在およびすべての基礎ディレクトリからのすべてのログファイルが削除される助けを借りて
多くの場合、この機能(再帰的グロビング)とls / mv / cpを組み合わせることで、findを使用してスクリプトを置き換えて簡素化できます。

3.ログを表示する


バッシュ:
user@host:/home# less /var/log/messages
zsh:
まあ...ある種の超突破を期待するのはナイーブだろう。 開発者は、いわゆる「直感的な」リダイレクトのみを導入しました。
user@host:/home# < /var/log/messages
$ PAGER変数のプログラムが使用されます。

4.設定ファイルの編集


バッシュ:
user@host:/home# vim /somedir/someconfig.ini
zsh:
操作は簡単ですが、ここで「マッチを保存」できます。
ファイルを拡張子で関連付けることができます。 たとえば、iniファイルをvimに関連付けます
user @ host: / home #alias -s ini = vim

その後、ファイル名を入力するだけです
ユーザー@ホスト: /ホーム / somedir / someconfig.ini

編集用に開きます。

ホームコンソールの達人はこの機能を使用して映画、写真、ドキュメントを開きますが、私にとっては狂信的です。 私は繰り返します-デスクトップGUIステアで。

5.スクリプトの適度な使用


中程度。最も一般的なタスクでは、すべての自転車がすでにかなり前に発明されており、90%のケースで単純または難しい単一線で十分です。 ここで出場者がどのように振る舞うか見てみましょう。
仕事では、bash2、bash3、およびzshを備えたCamputerを使用する必要があります。そのため、それらの動作を非常に明確に確認でき、スクリプト機能の面で進化と言えます。
ホストのポーリング、ある種のテーブルの同じレコードの生成など、一般的なタスクでの動作は次のとおりです。
bash2:
user@host:/home# for i in $(seq 1 10);do ping -c 1 192.168.0.$i;done
bash3:
user@host:/home# for i in 192.168.0.{1..10};do ping -c 1 $i;done
zsh:
user@host:/home# for i in 192.168.0.{1..10};ping -c 1 $i

同時に、zshはループ内の変数の形式をより慎重に処理します。 コード
user@host:/home# for i in 192.168.0.{001..100};echo $i
直感的に期待されるものを正確に提供します。 この場合のbashは、カウンターの先行ゼロを破棄します。

一般に、bashで記述されたスクリプトは、zshと99.999%の互換性があります(互換キーを使用する場合、100%完全です。パーセンテージの詳細については、マナのCOMPABILITYセクションを注意深くお読みください)。互換性の点でスクリプトに違いが1つだけ見つかりました。bashでは、配列要素に0から番号が付けられ、zshには1から番号が付けられます。
バッシュ:
for element in {0..$((${#array[@]})) - 1}
zsh:
for element in {1..$((${#array[@]}))}

広範囲にわたる結論


zshの残りの5万の利点、キー、およびその他のオプションについては説明しませんでした。経験から、シェルの可能性の90%が99.9%使用されていないことがわかっているからです。 さらに、日常の作業ではほとんど利点がなく、bashに比べて直感的ではありませんが、.zshrc領域のファイルを使用して思慮深い作業が必要です。

上記のすべての機能がわからない場合、外部およびzsh機能に関して、ユーザーは再帰検索などのすべての機能を含め、bashと完全に区別できなくなります。 したがって、シェルは簡単に変更でき、徐々にマスターできます。
zshは、ほとんどのフル機能のLinuxディストリビューションに含まれています(* BSD +多くのエキゾチックなOSに移植されており、Windowsでも表示されますが、うそをつきません-自分で確認しませんでした)、またはリポジトリから簡単にアクセスできます。

バッシュが反撃


上記のzshのすべての利点を考慮して使用しても、bashが私にとってより便利な点がいくつかあります。
-cdspellオプション。不要なリクエストなしに、 cd / ect on cd /などのパスのタイプミスを修正します。
-ubuntuでは、zshはデフォルトでaptと正しく連携できません。aptはbashではアンインストールされたパッケージまたは類似のパッケージを提供できます。 zshは「package / command not found」とだけ言います。 これを打ち負かす方法はわかりません 解決済みUPDを参照



*もちろん、 オリジナルでは 、すべてが正反対でした。したがって、安価なPRのために、引用はうんざりする必要がありました。

UPD
1.ありがとう、ありがとう。 皆のためにトピックをLinuxに移動しました
2.盗作および他人の発見の不適切な編集の例としての私の設定
3.リモートホスト上のメニューの謎はコメントで解決されています-もちろん、キーによる許可なしにはできません。
4. zshとaptをubuntuに統合する問題を解決してくれたImposerenに感謝します。 zshのaptがアンインストール/同様のパッケージを提供するためには、ファイル/ etc / zsh_command_not_foundを(ソースという単語から)トラッシュする必要があります
5.すべてのコメントを再考することはめったにありませんが、月の名前のトピックを適切に更新し、忘れないようにします

Source: https://habr.com/ru/post/J82537/


All Articles