如何以编程方式在 Windows 终端中启动 WSL 并运行命令

如何以编程方式在 Windows 终端中启动 WSL 并运行命令

我想bash从批处理文件在 Windows 终端内启动 Ubuntu WSL [shell: ] 并传递一个命令,该命令应在启动后立即运行。

  • 直接启动 WSL 时,我可以使用-c参数执行此操作;例如,以下操作打开 WSL 并与一些本地端口转发建立 SSH 连接:
    bash -c "ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]"
    

我如何使用 Windows 终端实现这一点?

答案1

我找到了两种方法,目前都有效:

  1. 创建专用配置文件:
    commandline选项还接受参数,这些参数在启动时直接传递给 shell,允许直接使用wsl.exe附加的“启动命令”:
    {
      "guid": "{...}",
      "hidden": false,
      "name": "Ubuntu SSH",
      "commandline": "wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]",
    }
    
    我现在可以通过批处理文件启动 shell,该文件使用下面的命令运行;但是,缺点是新的配置文件显示在 Windows 终端的配置文件选择菜单
    wt -p "Ubuntu SSH"
    

  2. 传递commandlinewt
    如选项 1 所示,该commandline选项可以包含目标 shell 的更多参数,从批处理文件调用时可进行以下工作:
    wt wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]
    
    我没有找到任何官方的在线资源来解释为什么这样做有效,调整建议这个答案,所以我不确定这是否应该以这种方式工作,或者它是否是一个可能在未来版本中破坏的隐藏/无意的功能。

答案2

错误信息是正确的:Windows Terminal 没有参数-c

句法是:

wt [options] [command ; ]

唯一的选择是:

  -h,--help                   Print this help message and exit
  -v,--version                Display the application version
  -M,--maximized Excludes: --fullscreen
                              Launch the window maximized
  -F,--fullscreen Excludes: --maximized
                              Launch the window in fullscreen mode
  -p                          Profile
  -d                          Directory

相关内容