如何在 Windows 终端中从命令行打开多个选项卡并运行 ssh?

如何在 Windows 终端中从命令行打开多个选项卡并运行 ssh?

我有 WSL2 和一个 Ubuntu 实例,有没有办法在 Windows 终端中从命令行打开多个选项卡并在其中运行程序?

为了更详细地说明,我想做以下事情,因此如果有办法的话请告知:

  1. 手动打开 Windows 终端(单击它)。这里我已经将 Ubuntu 设置为我的默认终端
  2. 在我的 Ubuntu 选项卡中,我想要一个可以运行的 shell 脚本
  3. shell 脚本应该会打开一些 n 个选项卡,就像 Ubuntu 一样
  4. 然后在每个新选项卡中自动运行特定的 ssh(登录到远程机器)。
  5. 奖金为刚刚打开的每个标签设置颜色

我目前手动完成所有这些工作,并希望以某种方式实现自动化。

我说这个帖子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/

相关内容