zsh -シート


基礎


基本的なコンセプトから始めましょう.

zshはおそらくbash ++です


zshはkshやtcshの基本的な機能の多くを持っているので、条件文、展開、または割り当てのような一般的な構文はほとんど同じように動作します.
zshはあなたが役に立つかもしれないが、クールな追加機能をもたらします.
zshは"z - shell "を表し、Unixシステム用です.これは、端末上で使用するコマンドをラップするインタラクティブシェルです.

しかし、ZSHはbashもshもありません


たとえZSHがbashとshと非常に互換性があるとしても、若干の顕著な違いがあるのを見ます.その結果、次のように動作します.
zsh myscript
sh myscript.zsh
./myscript.sh
しかし、それは少し紛らわしいです、そして、デフォルトのふるまいが同じでないので、あなたは最悪のシナリオで予想外の誤りさえ得ることさえできます.

インストール


zshがシステムですでに利用可能であるならば、zshがあなたの現在のシェルであるかどうかチェックすることができます:
echo $0
  • それが「zsh」と言うならば、あなたは行く準備ができています
  • それが別のシェルの場合は、単にタイプzsh すばやくプロンプトを切り替える
  • デフォルトのシェルとしてzshを設定する場合はchsh -s /bin/zsh
  • zshがまだシステムにないなら、インストールするのはとても簡単です.

    ベストフレームワーク


    インストールできますOh my zsh , 設定を緩和し、カスタマイズのトン(例えば、テーマ、プラグイン、別名など)を提供する素晴らしいフレームワーク.

    不可知論法


    端末で次のコマンドを実行できます.
    sudo apt update && apt install zsh && chsh -s /bin/zsh
    
    上記のコマンドはパッケージをインストールし、デフォルトのシェルとして設定します.を返します./bin/zsh , 使えます$(which zsh) 代わりにシステムにzshを見つけます.
    Linuxディストリビューションによってはsudo apt 適切なコマンドで.例えば、あなたの使用yum -y install セントスとpacman -S zsh アーチLinuxで.

    設定ファイル


    zshはbashのような設定ファイルを使います:
    .zshenv  # env vars
    .zprofile # external commands
    .zshrc # global settings and customizations such as autocompletion, case sensitivity, aliases, etc
    .zlogin # commands on shell login
    .zlogout # commands on shell exit
    


    それは#! bashファイルの先頭にあります."Bang "は感嘆符"!"
    #!/usr/bin/zsh
    
    それを忘れないようにするのが不可欠です#!/usr/bin/bash , 次に、実行時にbashインタプリタが使用されます./myscript , デフォルトのシェルにかかわらず.

    スクリプトの実行


    zsh myscript.zsh
    
    また、スクリプトを実行可能にして実行できます.
    chmod +x myscript.zsh && ./myscript.zsh
    

    ZSHは自動修正できる


    zshは、小さなタイプミスを検出し、コマンドの修正を要求するのに十分です.

    zsh: correct 'MISPELLED_COMMAND' to 'COMMAND' [nyae]?


    また、フォルダ名とファイルのために動作することに注意してください.
    それはかなりクールですが、いくつかのケースで悩まされる可能性があります.そのように自動修正を無効にすることができます.
    nocorrect MY_CUSTOM_COMMAND
    

    あなたはCDを使用する必要はありません


    あなたは既にこのトリックを知っているかもしれませんが、あなたがそうしない場合、変更ディレクトリコマンドはzshでディレクトリを閲覧する必要はありません.以下のコマンドを使用して、希望するパスを取得します.
    /Users/ella/Desktop/
    
    例えば、入れ子になったディレクトリにquicky移動するのはかなり便利です.例えば、ドラッグして、端末内のフォルダをドロップしてEnterキーを押します.
    それは可能性がありますautocd オプション.

    端末でキーボードショートカットを使用できます


    bashのように、時間とエネルギーを得るために端末でショートカットを使用することができます.例えば、Ctrl + U カーソルから行の先頭まで削除できますCtrl + L 端末をクリアします.

    ベストドキュメント

  • すばらしいマニュアルを読んでください.man zsh
  • Another Doc
  • zsh.org
  • zsh lovers
  • Oh my zsh wiki
  • iterm2
  • zsh Arch Linux
  • スクリプティング


    あなたはbashで学んだほとんどのトリックを使用することができますし、構文は同じです.しかし、追加の機能と重要な違いがあります.

    zsh array 1 - indexed


    それはbashとの大きな違いです.配列は0 でも1 , そのため、ほとんどのユーザにとってより直感的ではないでしょう.
    MyArray=(All In One)
    echo ${#MyArray[2]} # displays 2 in zsh (number of chars of the second element) and 3 in bash (number of chars of the third element)
    
    その結果、全長はzshの最後のインデックスと同じです.
    NB :デフォルトの動作を0 - indexed配列を変更することができますが、一般的なルールとして推奨するものではありません.

    ZSHはglobbingでよりよい


    bashでは、find コマンド.たとえば、すべてのファイルにコマンドを適用するには、次のコマンドを使用します.
    find . -type f -print | xargs CUSTOM_COMMAND
    
    zshではglobbingを使うことができます.
    CUSTOM_COMMAND **/*(.)
    
    **/ を返します.* すべての要素を対象とする.(.) はファイルにマッチする.

    すべてのglob修飾子


    必要な要素をターゲットにするには、フィルタのような多くのGlob修飾子を結合できます.
    修飾子
    説明/ディレクトリF空以外のディレクトリ(空:(/^F) ).プレーンファイル@シンボリックリンク*実行可能ファイルr/A/R所有者/グループ/世界によって読めるw/I/W所有者/グループ/世界によって書き込み可能x/E/X所有者/グループ/世界による実行可能s/S/tsetuid/setgid/sticky bitf spechas chmod スタイルパーミッションspec u: name :ユーザー所有name g: name :グループ所有name a[Mwhms][-+] n与えられた単位のアクセス時間(下記参照)m[Mwhms][-+] n与えられた単位の修正時間L[kmp][-+] n与えられた単位のサイズ(下記参照)^修飾子の後にNEGATE-リンクをトグルします(最初の1つはオンになります).Nマッチがなければ空のパターンが空になるDリーディングドットn数値をソートするo[nLamd]与えられたコードによる順序O[nLamd]与えられたコードの逆の順序[ num ]絹篩で篩うたようnum -ファイルの現在の順序[ num1 , num2 ]絹篩で篩うたようnum1 -東理大学num2 -ファイル
    Source: obda.net

    コモントリック


    彼らは魔法ではないので、修飾子に注意してください.あまりに大きなフォルダをスキャンすると、エラーが発生する可能性があります.とにかく、それは確かに一般的な操作を緩和します.

    リストファイルのみ
    ls **/*(.)
    

    リストディレクトリのみ
    ls **/*(/)
    

    特定の拡張子を持つすべてのファイルを見つける
    ls **/*.md
    

    25メガバイトより大きいファイルを見つける
    ls **/*(.Lm+25)
    

    最後の2日間に変更されたファイルをリストします
    ls **/*(.md-2)
    

    特定のユーザーが所有するファイルのアクセス許可を変更する
    chmod 644 **/*(u:ella:) # provided that ella exists ^^
    

    ああ私のzshの選択肢?


    それは積極的に維持され、使用して構成するために非常に友好的であるので、devはしばしば私のzshを使用することをお勧めします.それはZSHをすべてカスタマイズする唯一の方法ではない.
    たとえば、開いている.zshrc ファイルを追加し、追加のレイヤーなしでプロンプトをカスタマイズする特定の行を書き込みます.主な注意点としては、もう少し複雑で、おそらく面倒なことですが、多くのdevはフレームワークをインストールするのではなく、ネイティブのツールに固執するでしょう.
    # for all options @see https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.html
    PROMPT='%F{red}%1~%f %# '
    
    # aliases
    alias gs='git status'
    alias gc='git commit'
    
    私は完全にそのアプローチを尊重する.私は、しかし、代わりのフレームワークの大ファンでありません.私がテストしたほとんどのツールは信頼性がありません.
    あまりに多くの依存関係は懸念でありえます.加えて、多くの場合、すべての機能とエイリアスのわずかな割合を使用してプラグインをトンのインストールとロードを終了します.

    更なる


    あなたは、より多くのカスタマイズと結合を必要とするかもしれません.

    カリ・リナックス


    カリリナックスとそのデフォルトに飛び込む価値がある.zshrc ファイル.ペンのテストディストリビューションでは、バインドや補完などの高度な機能を使用することができます.
    # ~/.zshrc file for zsh interactive shells.
    # see /usr/share/doc/zsh/examples/zshrc for examples
    
    setopt autocd              # change directory just by typing its name
    #setopt correct            # auto correct mistakes
    setopt interactivecomments # allow comments in interactive mode
    setopt magicequalsubst     # enable filename expansion for arguments of the form ‘anything=expression’
    setopt nonomatch           # hide error message if there is no match for the pattern
    setopt notify              # report the status of background jobs immediately
    setopt numericglobsort     # sort filenames numerically when it makes sense
    setopt promptsubst         # enable command substitution in prompt
    
    # enable completion features
    autoload -Uz compinit
    compinit -d ~/.cache/zcompdump
    zstyle ':completion:*:*:*:*:*' menu select
    zstyle ':completion:*' auto-description 'specify: %d'
    zstyle ':completion:*' completer _expand _complete
    zstyle ':completion:*' format 'Completing %d'
    zstyle ':completion:*' group-name ''
    zstyle ':completion:*' list-colors ''
    zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
    zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
    zstyle ':completion:*' rehash true
    zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
    zstyle ':completion:*' use-compctl false
    zstyle ':completion:*' verbose true
    zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
    
    # force zsh to show the complete history
    alias history="history 0"
    
    # configure `time` format
    TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S\ncpu\t%P'
    
    Source: Kali Linux - .zshrc

    ソースコマンドを忘れないでください


    The source 他のスクリプトの中でスクリプトを実行したり、現在の端末で修正を適用したい場合はコマンドが必要です.たびに変更する.zshrc , Aを実行するsource ~/.zshrc 更新された設定を読み込みます.
    また、現在の端末を閉じることができます.

    エイリアス


    私はエイリアスを使うのが大好きです.私はそれが生産性を向上させると、同じコマンドラインを繰り返し覚えての面倒を削除する素晴らしい方法だと思う.
    もちろん、zshで設定できます.あなたは直接それらを置くことができます.zshrc :
    # 🥷🏻
    alias erase="history -p"
    

    別のファイルからのソース


    いくつかのエイリアスがあるのですが、別のファイルを使って物事を整理しておくことをお勧めします.私は通常グローバルエイリアスと特定のものを設定します.例えば、私のフリータイムと仕事のエイリアスに使用するエイリアスです.
    それを達成するためにいくつかのアプローチが、最も簡単ですがsource あなたの追加ファイル.zshrc :
    source "~/.aliases_for_work"
    source "~/.aliases_for_fun"
    

    サフィックスエイリアス


    エイリアスを定義するには-s オプション:
    alias -s {css,html}=vi
    
    上の行が設定されますvi 編集者として.css and .html ファイル.

    グローバルエイリアス


    zshではどこでも拡張されるグローバルエイリアスを定義できます.
    alias -g vid='-v -i --d' # letters are arbitrary here
    
    次に、使用することができますvid 端末に直接、先頭、中央、またはコマンドラインの末尾にあるかどうか.