我正在使用 WSL1 运行 Ubuntu,并且我想在 Windows 中创建不同的快捷方式以在 WSL 启动时运行不同的命令,例如,一个用于自动启动 SSH 会话,另一个用于更改到特定目录。执行启动命令后,我需要它像往常一样继续运行,但是我尝试过的所有操作都会关闭终端。我尝试过类似的东西
c:\windows\system32\bash.exe -c -i -s ssh ip
但它似乎没有做任何事情,或者如果有,它关闭得太快了,我看不到。
我正在使用 WSL1 运行 Ubuntu,并且我想在 Windows 中创建不同的快捷方式以在 WSL 启动时运行不同的命令,例如,一个用于自动启动 SSH 会话,另一个用于更改到特定目录。执行启动命令后,我需要它像往常一样继续运行,但是我尝试过的所有操作都会关闭终端。我尝试过类似的东西
c:\windows\system32\bash.exe -c -i -s ssh ip
但它似乎没有做任何事情,或者如果有,它关闭得太快了,我看不到。
首先,我将建议您使用较新的(微软推荐的)
wsl.exe
命令,而不是bash.exe
.bash.exe
仍然可用,但微软称其为“历史命令”,已被“取代”wsl.exe
。该wsl
命令还提供了比旧的bash.exe
.您遇到的第一个问题是您的命令行中存在语法/引用错误,所以是的,Windows 终端选项卡在您阅读之前正在关闭。最好先从 PowerShell 或 CMD 配置文件/选项卡运行它,以便能够看到输出:
如您所见,如果您将命令字符串传递给
bash -c
,则需要将其引用。否则,bash 只是看到ssh
没有ip
.wsl
另一方面,该命令确实允许不带引号直接调用。将命令行的其余部分(在处理完所有参数/标志之后)传递到默认 shell 中,并引用到-c
参数中,这基本上足够聪明。您可以使用wsl ssh ip
.接下来,您想知道如何在运行命令后保持选项卡/shell 处于打开状态。这可以通过多种方式完成,但最简单的是:
exec
将继续运行的替换外壳正如您所经历的,仅执行其中的前两个将导致 shell 在命令退出时关闭。
这看起来像:
C:\Windows\System32\cmd.exe /k wsl /path/to/script.sh
/k 开关使 cmd 不退出,因此您可以读取输出。wsl 没有类似的开关。