让 OpenChamber 工作台终端默认使用 Git Bash
目标
OpenChamber 工作台(Workbench)里打开的终端,默认启动 Git Bash,而不是原来的 cmd.exe。
背景:原来是哪个 shell
OpenChamber 终端设置里 terminalShell 默认为 auto。在 Windows 上,auto 会按下面的顺序取第一个存在的可执行文件:
- 环境变量
OPENCHAMBER_TERMINAL_SHELL - 环境变量
SHELL - 环境变量
ComSpec <SystemRoot>\System32\WindowsPowerShell\v1.0\powershell.exepwsh.exepowershell.execmd.exe
本机实际情况:
SHELL为空OPENCHAMBER_TERMINAL_SHELL未设置ComSpec = C:\WINDOWS\system32\cmd.exe
所以 auto 命中第 3 项,终端启动的是 cmd.exe。
解决办法
把环境变量 OPENCHAMBER_TERMINAL_SHELL 指向 Git 的 bash.exe。这样 auto 会命中第 1 项,直接启动 Git Bash。
1. 设置用户环境变量
在 PowerShell 中执行:
[Environment]::SetEnvironmentVariable(
'OPENCHAMBER_TERMINAL_SHELL',
'C:\Program Files\Git\bin\bash.exe',
'User'
)
验证:
[Environment]::GetEnvironmentVariable('OPENCHAMBER_TERMINAL_SHELL', 'User')
Test-Path 'C:\Program Files\Git\bin\bash.exe'
应分别输出:
C:\Program Files\Git\bin\bash.exe
True
2. 保持终端设置为 auto
OpenChamber → 设置 → 外观 → Terminal shell,保持为 Auto(默认值)即可,不要显式选择其它 shell(显式选择会覆盖 auto)。
对应的持久化配置项(仅供参考,无需手动改):
"terminalShell": "auto"
3. 重启 OpenChamber
环境变量是在进程启动时继承的,必须完全退出并重新打开 OpenChamber 才会生效。
重启后,工作台里新开的终端即为 Git Bash。
补充修复:Git Bash 里 ls、grep、cat 等命令找不到
现象
切到 Git Bash 后,ls、pwd 之外的很多命令报 command not found,和正常的 Git Bash 不一样。
根因
Windows 注册表里的变量名是 Path(首字母大写),而 OpenChamber 启动终端时会构造环境变量对象:
{ ...process.env, PATH: buildAugmentedPath(), ... }
这会产生两个仅大小写不同的键:Path 和 PATH,Windows 环境块里同时存在这两项:
- Git 的启动器
C:\Program Files\Git\bin\bash.exe(compat-bash)会把 MSYS 目录(/usr/bin、/mingw64/bin)追加到Path上; - 但 MSYS/Cygwin 的 bash 是按大小写敏感读取环境变量的,它只读全大写的
PATH,于是看不到/usr/bin,ls/grep等 coreutils 全部找不到。
cmd / PowerShell 读环境变量不区分大小写,所以之前用 cmd 时完全正常,只有换成 Git Bash 才暴露出来。
修复
把 Git 的 usr\bin 和 mingw64\bin 追加到用户 Path,这样 OpenChamber 生成的大写 PATH 里也会带上它们:
$cur = [Environment]::GetEnvironmentVariable('Path','User')
$add = 'C:\Program Files\Git\usr\bin;C:\Program Files\Git\mingw64\bin'
[Environment]::SetEnvironmentVariable('Path', $cur.TrimEnd(';') + ';' + $add, 'User')
然后重启 OpenChamber,新开的终端里 ls、grep、sed、find 等即可正常使用。
可选:开启登录 shell
在 设置 → 外观 → Terminal shell 处开启 login shell 开关(对应 terminalLoginShells),
shell 会以 -l 启动并加载 /etc/profile,除了修复 PATH,还能获得 Git Bash 快捷方式同款的别名(ll、dir 等)。
仅靠上面的 Path 修复也能让常用命令可用,此项可选。
注意事项
-
如果在设置里把 Terminal shell 显式选成了
cmd/powershell等,OPENCHAMBER_TERMINAL_SHELL将不再起作用;要用 Git Bash 就保持auto。 -
若想改回原来的行为,删除该用户环境变量即可:
[Environment]::SetEnvironmentVariable('OPENCHAMBER_TERMINAL_SHELL', $null, 'User') -
本方案只影响 OpenChamber 的工作台终端,不影响系统里其它终端的默认 shell。
相关改动(同一目标下的其它终端)
围绕“默认用 Git Bash”这个目标,另外两处也做过配置,一并记录:
PowerShell 里输入 bash
在 PowerShell 配置文件中把 bash 指向 Git Bash:
文件:C:\Users\lu\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
function bash {
& "C:\Program Files\Git\bin\bash.exe" --login -i @args
}
(同时把执行策略设为 CurrentUser 的 RemoteSigned,否则配置文件不会加载。)
Windows Terminal 下拉菜单里出现 Git Bash
在 Windows Terminal 的 settings.json 的 profiles.list 中新增了一个 profile:
文件:C:\Users\lu\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
{
"commandline": "\"%PROGRAMFILES%\\Git\\bin\\bash.exe\" --login -i",
"guid": "{2ece5bfe-50ed-5f3a-ab87-5cd4baafed2b}",
"hidden": false,
"icon": "%PROGRAMFILES%\\Git\\mingw64\\share\\git\\git-for-windows.ico",
"name": "Git Bash",
"startingDirectory": "%USERPROFILE%"
}