我正在使用 WSL,并且已在文件资源管理器中配置了上下文菜单快捷方式以在当前目录中启动 WSL bash 终端。当没有 bash 终端运行时,它会按预期工作。但是,当终端的一个窗口已经在运行时,从另一个文件夹启动新窗口不会在新文件夹中启动脚本,而是在启动上一个实例的同一文件夹中启动脚本。我找不到指定启动脚本的当前目录的方法,因此单窗口情况默认情况下就可以正常工作。我想我只需要帮助找出允许它适用于多个窗口的正确选项。
这是我的上下文菜单命令(我将其添加到注册表中的 HKEY_CLASSES_ROOT\Directory\Background\shell)
C:\Windows\System32\wscript.exe C:\path\to\terminal.vbs
以下是 terminal.vbs 的内容
args = "-c" & " -l " & """DISPLAY=:0 terminator"""
WScript.CreateObject("Shell.Application").ShellExecute "bash", args, "", "open", 0
我想我只需要为 ShellExecute 指定一个选项,它将在工作目录中启动它,现在看来单窗口情况默认就可以工作。
背景:我按照本指南在 WSL 中设置终端。 https://blog.ropnop.com/configuring-a-pretty-and-usable-terminal-emulator-for-wsl/
注意:这是我的第一篇 stackexchange 帖子,我对 Windows 命令行生态系统不太熟悉。我会接受有关如何使帖子标题更具相关性的建议。谢谢。
答案1
以下步骤使用批处理文件,不使用任何 Visual Basic 脚本,因为某些防病毒程序可能会将其视为恶意软件。因此,后台将出现命令提示符窗口。
程序
在 WSL 中:
这些是在 Windows Subsystem for Linux (WSL) 中使用 Debian 测试的。某些步骤可能不需要在不同的发行版中使用。
- 安装所需的软件包:
apt update
apt upgrade
apt install terminator dbus-x11
- 添加一些文件来抑制警告:
mkdir -p ~/.config/terminator
touch ~/.config/terminator/config
在 Windows 中:
在 Windows 中运行 X 服务器。例如 Xming、VcxSrv、X410 等。
使用以下几行创建一个批处理文件(例如,test.bat):
@echo off
for /F %%X in (
'wsl.exe wslpath %1') do (
wsl.exe DISPLAY=:0 terminator --working-directory="%%X"
)
假设此批处理文件路径为C:\MyFiles\test.bat
。然后使用以下几行创建一个注册表文件(例如,test.reg):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\Open Terminator Here\command]
@="C:\\MyFiles\\test.bat \"%V\""
现在双击该test.reg
文件并接受警告。这将导入注册表。右键单击任何文件夹,将出现上下文菜单“在此处打开终结器”。
解释
在注册表中,"%V"
占位符变量采用当前工作目录路径。请参阅这个答案了解更多详情。此文件夹路径传递给批处理文件。在批处理文件中,%1
占位符变量采用该文件夹路径。wsl.exe wslpath
命令将 Windows 样式路径转换为 UNIX 样式。现在,此 UNIX 样式路径DISPLAY=:0 terminator --working-directory
借助for /F
循环和%X
变量传递给命令。DISPLAY
您还可以根据需要更改变量。