Windowsのターミナル
Windowsのターミナルがどのように構成しているのかいまいちよくわかっていない
文字化け問題などがよく起きる印象があるが、どのアプリケーションが悪いのか追求する時に、構成を知っておいたほうが対処しやすい
- > 従来のWindowsでコマンドライン(CUI)アプリを起動すると、「Windows コンソールホスト」(conhost.exe)が「コマンド プロンプト」や「PowerShell」を開き、その上でアプリが実行されていた。
- conhost.exe ってのがいたのか!
- コマンドプロンプト
- conhost.exe -> cmd.exe
- PowerShell
- conhost.exe -> PowerShell.exe
- WSL
- conhost.exe -> WSL
conhost.exe
- ANSI/VTシーケンスに対応しUNIX系コマンドはそのまま利用できる
- コマンドヒストリをこのレイヤーで実装している
- UINIX系コマンドはインタラクティブシェルが個々に実装している
- ConEmu
- Hyper
- おそらくこれもターミナルからbash.exeを起動している
- これでGit Bashを指定する時は、実はgit-bash.exeではなくbash.exeを指定している
- 要はCUIで、キーボードを介して人間とコミュニケーションできるタイプのプログラム全般のこと
- よく使われるもの
- cmd.exe
- PowerShell.exe
- bash.exe
- インタラクティブシェルの中から更に呼び出すことが一般的なシェルっぽいもの
- Lightweight LanguageのREPL - Pythonとか
- ターミナルマルチプレクサ
- (ある意味Windows TerminalもGUI版のターミナルマルチプレクサではあるが・・)
- screen
- tmux
- emacs, vimのシェルモードもこれに近い
例
WindowsのコマンドプロンプトからWindows用のvimを起動
> mermaid
graph TD
subgraph conhost.exe
subgraph cmd.exe
vim.exe
end
end
<<
GitBashからWindows用のvimを起動
> mermaid
graph TD
subgraph git-bash.exe
subgraph bash.exe
vim.exe
end
end
<<
Windows TerminalからコマンドプロンプトとGit Bashを起動し、それぞれでvimを起動
> mermaid
graph TD
subgraph Windows Terminal
subgraph cmd.exe
vim.exe1
end
subgraph bash.exe
vim.exe2
end
end
<<
Windows TerminalからコマンドプロンプトとGit Bashを起動
- コマンドプロンプトではvimを起動
- Git BashではScreenを起動し、vimとemacsを起動
> mermaid
graph TD
subgraph Windows Terminal
subgraph cmd.exe
vim.exe1
end
subgraph bash.exe
subgraph screen
subgraph bash.exe1
vim1
end
subgraph bash.exe2
vim2
end
end
end
end
<<