Linuxユーザーとして、私は常にbashを使用しました。これは、使用したすべてのディストリビューションでデフォルトであったためです。BSDなどの他のUnixシステムを使用している人々は、他のシェルをはるかに頻繁に使用しているようです。もう少し学ぶために、zshを試してみることにしました。
bashユーザーとして:
- どの機能が恋しいですか?
- そして、私は何に注意する必要がありますか?
Linuxユーザーとして、私は常にbashを使用しました。これは、使用したすべてのディストリビューションでデフォルトであったためです。BSDなどの他のUnixシステムを使用している人々は、他のシェルをはるかに頻繁に使用しているようです。もう少し学ぶために、zshを試してみることにしました。
bashユーザーとして:
回答:
他のStack Exchangeサイトのトピックについては、すでにかなりの活動が行われています。覚えている限り(bashからzshへ)の切り替えの私の経験(何年も前²)で、私は1つのことを見逃していませんでした。私は多くを得ました。以下は、私が最もよく使用するシンプルなzsh固有の機能です。
zshの機能I私はたまにはbashを使用するほとんどのミスはautocdです:zshの中で、ディレクトリを実行すると、あなたがオンに提供し、それに変更することを意味autocd
option.⁴
別の非常に便利な機能は、派手なグロビングです。象形文字の文字は、(のように、それは同等書くことよりも、それらをルックアップするために頻繁に高速ですビット覚えにくいが、非常に便利なfind
コマンド)。いくつかの簡単な例:
foo*~*.bak
=一致するfoo*
ものを除くすべての一致*.bak
foo*(.)
=一致する通常のファイルのみ=一致するfoo*
foo*(/)
ディレクトリfoo*
foo*(-@)
のみ= 一致するぶら下がっているシンボリックリンクのみfoo*
foo*(om[1,10])
=一致する最新の10個のファイルfoo*
foo*(Lm+1)
= 1MBを超えるファイルのみ= ディレクトリ内およびそのすべてサブディレクトリ、再帰的に
dir/**/foo*
foo*
dir
派手な名前の変更には、zmv
ビルトインが便利です。たとえば、すべてfile
をにコピーするにはfile.bak
:zmv -C '(*)(#q.)' '$1.bak'
bashとzshの両方には、適切な完了システムがあり、明示的に(. /etc/bash_completion
またはautoload -U compinit; compinit
)オンにする必要があります。Zshの方がはるかに構成可能であり、一般的にはより洗練されています。
なしでzshを実行すると.zshrc
、構成オプションを選択できる対話型メニューが起動します。(一部のディストリビューションではこれが無効になる場合がありますautoload zsh-newuser-install; zsh-newuser-install
。その場合は実行してください。)推奨される履歴オプションを有効にし、(「新しいスタイル」)補完を有効にし、を除く「共通シェルオプション」を有効にすることをお勧めしますbeep
。後で、発見したオプションをさらに構成します。
² 当時、プログラム可能な完了はzshのキラー機能でしたが、bashはすぐにそれを取得しました。
b バージョン4でのみbashが取得した機能(多くのシステムではまだ利用できない)は、より小さなタイプです。
autocd
上記で説明した機能をサポートするようになりました。コマンドを使用して機能を有効にしますshopt -s autocd
。その後、機能は説明したとおりに機能します。
where
コマンドもありますが、コマンドと混同しないでくださいwhich
。
-exec
との選択のようなもののためのシェルのe
などのツールへのパイプラインsort
とsed
を書き換えe
およびソート)。もちろん、もっと冗長です。
また、デフォルトのタブ補完はbashよりも優れています...たとえば...
~/.e.d
TABは~/.emacs.d/
zshに展開され、bashはビープ音を鳴らします。
_-.
ワイルドカードとして設定していることに気付きました。 zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
。stackoverflow.com/q/7906078/311660を
zsh
複数行コマンド(zsh line editorを参照)を編集できますが、bashは編集できません。同じトリック(Ctrl-p
)を試みると、bashは最後のコマンドをフェッチします。
Bashには、次を使用してポートを開くことができるという機能があります。
/dev/tcp/host/port
または
/dev/udp/host/port
ただし、(パスが実際に存在する場合)障害と見なされ、シェルが行うべき範囲外であるため、Debianでは無効になっています。詳細 [debianメーリングリスト]
which
bash のコマンドは、コマンドの場所のみを明らかにします。
Zsh では、which
anの定義、alias
aのソース、function
およびコマンドの場所が明らかになります。
シェルエイリアスがあったとしましょう:
alias gg='git log'
Bashでは、私たちが尋ねた場合:which gg
結果は無効になります
Zshのでは:which gg
私たちを与えるだろう...
gg: aliased to git log
シェル関数があったとしましょう:
hello() {
echo "Hello World"
}
Bashで質問した場合:which hello
結果は無効になります。
Zshのでは:which hello
私たちを与えるだろう...
hello() {
echo "Hello World"
}
type
(ビルトイン)コマンドを介して同じ機能を提供します。そして、ひと言で言えばwhich
、外部コマンドであり、bash ビルトインではありません。
多くの場合、zshcontrib(1)
1つを読むことで- と競合する2つのバージョンのautoload
-able tetris
ゲーム(もう1つは)を検出し、完全性を保つことができます(説明を参照)。ncurses
zsh
emacs
=
刺激を引き起こす可能性のあるキーワードに言及したいと思いcurl
ます(URLは通常?var=val
それらに含まれていますが、それは可能unsetopt
だと思います):
q file =less
(gentoo
)解決するq file $(which less)
=
問題のコマンドのフルパスに展開します。
他のことは、心の外で、正しいプロンプトRPS1=%d
($PWD
スタイルで表示する)、Alt + H(run-help
つまり、man
)、Alt + ? (which-command
)、、vared
およびzed
(autoload
関数)、Alt + Xウィジェットをバインドせずに実行するEmacsのミニバッファのようなもの、グローバルおよびサフィックスエイリアス、拡張された履歴追跡コマンド完了時間、-m
および-regex
マッチャー、シェルエミュレーション(例えばcsh
、ksh
とemulate
)およびautoload
run-help
組み込み関数のファイルスニペットを持ちます。
すべてではないにしても、ほとんどの機能はかなり前に実装されたもので、変更ログを読むと、大きな変更や新しい機能の追加はなく、非常に悲しいことです(これ以上探索したり発見したりするものはありません)。
bash
(とは対照的に)およびlinuxの精神により多く分布しているようです。たとえば、bash-specificによってオーバーライドされない場合、readline関数とキーバインドは(andに保持されているように)グローバルに適用できます。readline
zle
gnu history
~/.inputrc
/etc/inputrc
bind
私は個人的にemacs
(特に(現在の?)emacs-nox
フレーバーの見通しから)のような例外的なソフトウェアのインスピレーションであるzsh
とtmux
考え、そのような実装の例として非常に良い仕事をしました。その価値を評価する人々のために(X
サーバーを必要としない/依存しないレベルまで)。Unixシェルは十分に強力であり、その継続性と一貫性は適切なワークフローと生産性(コンピューティング全体で)に十分です。