ConEmu+WSL:新控制台无法打开当前标签目录问题求助
解决ConEmu + WSL 新窗口打开当前活动目录的问题
我之前也碰到过ConEmu 180506搭配WSL时这个目录同步的坑,咱们一步步来排查和修复:
1. 修正ConEmu任务的启动命令
你当前的任务命令里的-C~是强制让WSL启动时进入home目录,这直接覆盖了你想传递的当前目录参数,得先把这个去掉。另外,要让ConEmu能把Windows路径传递给WSL,需要调整命令:
把原来的命令:
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -C~ -cur_console:pm:/mnt
改成:
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt -c "cd \"%ConEmuDirWSL%\" && exec bash"
这里的关键点:
- 移除
-C~,避免强制跳转home目录 - 用
%ConEmuDirWSL%这个ConEmu内置变量,它会自动把Windows的当前目录转换成WSL能识别的/mnt/...格式 - 新增
-c "cd \"%ConEmuDirWSL%\" && exec bash",确保启动bash前先切换到目标目录
2. 检查ConEmu环境变量的传递
你提到只有$ConEmuPID和$ConEmuBuild生效,这是因为旧版本的ConEmu(比如180506)默认不会传递所有变量,需要在任务配置里手动开启:
- 打开ConEmu的「设置」→「任务」→ 编辑你的{Bash: bash}任务
- 在「命令」输入框下方,找到「环境变量」选项,点击「...」按钮
- 添加一行:
ConEmuDirWSL=%ConEmuDirWSL%,这样WSL就能接收到这个关键的路径变量 - 也可以把你需要的其他ConEmu变量(比如
ConEmuDir)按同样方式添加进去
3. 调整快捷键宏的参数
你当前的宏Shell("new_console", "{bash}", "", "%CD%")里的%CD%是Windows路径,WSL无法直接识别,而且ConEmu的宏里应该用内置变量来传递路径,改成:
Shell("new_console", "{bash}", "", "%ConEmuDirWSL%")
或者更简单,直接让宏自动继承当前标签的目录,不需要手动传参数:
Shell("new_console", "{bash}")
因为我们已经在任务命令里配置了%ConEmuDirWSL%,它会自动获取当前活动标签的目录。
4. 验证.bashrc的配置
你的.bashrc里的PS1设置是用来让ConEmu实时同步当前目录的,这个配置没问题,但要确保它能正确执行:
- 在WSL里执行
echo $ConEmuPID,如果能输出ConEmu的进程ID,说明变量传递正常 - 可以把那段代码稍微修改下,增加调试输出,确认是否执行:
if [[ -n "${ConEmuPID}" ]]; then echo "ConEmu detected, setting PS1" >> ~/conemu_debug.log PS1="$PS1\[\e]9;9;\"\w\"\007\e]9;12\007\]" fi
启动新窗口后,查看~/conemu_debug.log是否有内容,确认这段代码被执行了。
最后测试
做完以上修改后,重启ConEmu,打开一个WSL标签,切换到某个目录(比如/mnt/c/Users/你的用户名/Documents),然后按你设置的快捷键打开新窗口,应该就能直接进入当前目录了。
内容的提问来源于stack exchange,提问作者Alex Lepailleur




