我有 WSL2 和一个 Ubuntu 实例,有没有办法在 Windows 终端中从命令行打开多个选项卡并在其中运行程序?
为了更详细地说明,我想做以下事情,因此如果有办法的话请告知:
- 手动打开 Windows 终端(单击它)。这里我已经将 Ubuntu 设置为我的默认终端
- 在我的 Ubuntu 选项卡中,我想要一个可以运行的 shell 脚本
- shell 脚本应该会打开一些 n 个选项卡,就像 Ubuntu 一样
- 然后在每个新选项卡中自动运行特定的 ssh(登录到远程机器)。
- 奖金为刚刚打开的每个标签设置颜色
我目前手动完成所有这些工作,并希望以某种方式实现自动化。
我说这个帖子https://wslguy.net/2021/05/19/windows-terminal-bash-shell-open-new-tab-in-same-directory/它有一些指标并保证这种情况会发生,但我不知道如何做到这一点。
答案1
请注意,以下内容需要 Windows 11。对于 Windows 10,请使用cmd.exe /c
调用wt.exe
@AnarKi 的回答。请参阅本答案底部的脚注以了解原因。
为了清楚起见,使用每个选项的长形式,该 shell 脚本通常应该是:
#!/usr/bin/env sh
wt.exe --window 0 new-tab --profile "Ubuntu" --title "host1" --tabColor "#F00" ssh host1
wt.exe --window 0 new-tab --profile "Ubuntu" --title "host2" --tabColor "#0F0" ssh host2
wt.exe --window 0 new-tab --profile "Ubuntu" --title "host3" --tabColor "#00F" ssh host3
但是,您可能会发现:
- Windows 终端的 Ubuntu 配置文件命令行中的某些内容
- 或者你的 Ubuntu shell 启动脚本中的某些内容
- 或者(虽然我没有看到这个问题),正如你链接的文章提到的,起始目录目录
... 妨碍了它达到应有的“干净”状态。在这种情况下,我建议设置一个新的 Windows 终端配置文件,只需 即可启动 Ubuntu /bin/sh
。
- 使用 Windows 终端创建新的配置文件命令行选项:
wsl.exe ~ -e "/bin/sh"
- 将配置文件命名为“Ubuntu /bin/sh”
然后使用:
#!/usr/bin/env sh
wt.exe --window 0 new-tab --profile "Ubuntu /bin/sh" --title "host1" --tabColor "#F00" ssh host1
wt.exe --window 0 new-tab --profile "Ubuntu /bin/sh" --title "host2" --tabColor "#0F0" ssh host2
wt.exe --window 0 new-tab --profile "Ubuntu /bin/sh" --title "host3" --tabColor "#00F" ssh host3
脚注:Windows Terminal 是wt.exe
所谓的“应用程序执行别名”。它本质上.exe
只是设计用于启动 Microsoft Store(又称“UWP”、“Universal”、“Metro”和“Modern”)应用程序,而不是“真正的”Windows 二进制文件。
在 Windows 10 下,WSL 无法运行应用程序执行别名,因为它们不是由 WSL 处理的“真正的”可执行文件binfmt_misc执行。
然而,在 Windows 11 下,这似乎已经发生了变化,应用程序执行别名是在 WSL 中得到正确处理。
这只是一种理论,但这可能是为了处理将 WSL 本身添加到 Microsoft Store(目前在 Windows 11 下处于预览状态)而添加的。这将允许该wsl.exe
命令(现在可能是应用程序执行别名(从商店安装时))仍然在 WSL 本身内运行。
答案2
如果您从 Windows 终端上的 Linux 配置文件开始,并希望使用脚本在同一窗口内运行多个 ssh 选项卡(可以通过选项卡颜色轻松识别),则此解决方案将有效:
#!/bin/sh
cmd.exe /c "wt.exe" --window 0 new-tab --tabColor "#a64d79" ssh user@remote1
cmd.exe /c "wt.exe" --window 0 new-tab --tabColor "#3d85c6" ssh user@remote2
cmd.exe /c "wt.exe" --window 0 new-tab --tabColor "#f1c232" ssh user@remote3
细节:
转到此处的 Windows 终端命令的主要来源:https://docs.microsoft.com/en-us/windows/terminal/command-line-arguments?tabs=linux。我认为:
cmd.exe /c
如果您在 Linux 配置文件中运行,则您始终需要使用。- 登录后,SSH 会话将自动更改选项卡的标题,因此没有必要设置该
--title
选项。(也许有办法做到?无法解决这个问题) - 您不能直接通过 Linux 配置文件运行 ssh。因此,不要将配置文件设置为例如
--profile Ubuntu-20.04
(也许有办法做到这一点?无法解决这个问题)
供参考如果您希望保存这些 ssh 会话并在选项卡中手动打开它们,那么更好的解决方案是在 windows-terminal 的 JSON 配置中为它们创建新的配置文件,如下所示:
"profiles":
{
"defaults":
{
"acrylicOpacity": 0.2,
"bellStyle": "none",
"useAcrylic": true
},
"list":
[
{
"commandline": "ssh user@remote1",
"guid": "{xxxxxxxxx}",
"hidden": false,
"name": "some_name",
"tabColor": "#f1c232",
"icon": "C:\\some\\dir\\some_icon.png"
},
{
...
}
]
您可以在此处生成 GUID,例如https://www.guidgen.com/