Windows 7 で Cmder を使い始めたばかりですが、これは Windows 用のコンソール エミュレーターで、cmd を使用するよりも優れたエクスペリエンスを提供すると理解しています。ただし、私の理解では、エミュレーターはユーザー コマンドを OS に通信するためにシェルを実行する必要があるため、Windows ではシェルとは何でしょうか。CMD は Windows のデフォルト シェルですか。
これらのツールがどのように接続されているかを理解していただければ幸いです。
答え1
Windowsには、Cmd.exeとPowerShell 5という2つのコマンドラインシェルが組み込まれています。(Windows GUIはある意味では確かに「シェル」ですが、指示シェルであり、質問には適用されません。
CmderはデフォルトでCmd.exeを使用しますが、重くカスタマイズします。実際に表示される対話型プロンプトは通常の Cmd.exe プロンプトではなく、ConEmu によって表示され、clink
Cmd プロセスに挿入されます。(「Cmder」ウィンドウ全体は実際にはコンエミュ。
したがって、技術的にはすべてのコマンドは引き続き Cmd を介して実行されますが、タブ補完や Readline のようなキーバインドなどの高度な機能は、挿入された Clink ライブラリによって提供されます。
しかし、Cmd.exe以外にも、その他のシェルPowerShell や Bash などのコマンド ライン ツール (Windows には含まれていませんが、Linux では標準であり、Git For Windows と一緒にインストールされることもよくあります)。
しかし、私の理解では、エミュレータはユーザーコマンドをOSに伝えるためにシェルを実行する必要がある。
ある意味、そうです。ただし、シェルは単にコマンドを「実行」するために必要というわけではありません(どのプロセスでも、いつでも任意の.exeファイルを起動できます。それがそもそもシェルを作成する方法です)。むしろ、シェルの役割は、解釈するコマンド – if/for/while ループ、%variable% 拡張などを提供します。ただし、それ以外に、他のプログラムでは利用できない OS 機能への特別なアクセスはありません。1
(理論的には、端末できた独自のプロンプトを表示し、独自のコマンド言語を実装しますが、ほとんどの人が Bash 構文などに慣れているため、めったに行われません。
1(これはWindowsとすべてのUnix系システムに当てはまりますが、必ずしも全てたとえば、OpenVMS の DCL コマンド シェルは、当時の多くのオペレーティング システムと同様に、実際には通常のプログラムよりも特権が与えられています。この伝統を破ったのは、シェルが完全に通常の置き換え可能なツールである Unix だったと思われます。