from [2023-03-13]
Windowsのターミナルがどのように構成しているのかいまいちよくわかっていない
文字化け問題などがよく起きる印象があるが、どのアプリケーションが悪いのか追求する時に、構成を知っておいたほうが対処しやすい
- https://forest.watch.impress.co.jp/docs/news/1449110.html
- > 従来の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]
- [GitBash](git-bash.exe)
- おそらくこれもターミナルからbash.exeを起動している
- [Windows Terminal]
- これでGit Bashを指定する時は、実はgit-bash.exeではなくbash.exeを指定している
- [mintty]
## [インタラクティブシェル]
- 要は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を起動
本当か? conhost.exeは居ないか?
>> 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
<<
##わかりやすかった解説
- https://news.mynavi.jp/techplus/article/techp3911/
- https://forest.watch.impress.co.jp/docs/news/1449110.html