You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动