Как программно запустить WSL в терминале Windows и запустить команду

Aug 18 2020

Я хотел бы запустить Ubuntu WSL [shell: bash] внутри Windows Terminal из командного файла и передать команду, которая должна выполняться сразу после запуска.

  • При прямом запуске WSL я могу сделать это с помощью -cаргумента; например, следующее открывает WSL и устанавливает SSH-соединение с некоторыми перенаправлениями локальных портов:
    bash -c "ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]"
    

Как мне добиться этого с помощью Windows Terminal?

Ответы

1 suamikim Aug 18 2020 at 22:19

Я нашел два способа, оба из которых пока работают:

  1. Создать специальный раздел: вариант также принимает аргументы, которые непосредственно передаются оболочки при старте, что позволяет напрямую использовать с дополнительным «запуска команды»:
    commandlinewsl.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]",
    }
    
    Теперь я могу запустить оболочку с помощью командного файла, который запускается, как показано ниже: Однако недостатком является то, что новый профиль отображается в меню выбора профиля Windows Terminal :
    wt -p "Ubuntu SSH"
    

  2. Перейти commandlineк wt:
    Как показано в Варианте 1, этот commandlineпараметр может включать дополнительные параметры для целевой оболочки, при этом при вызове из пакетного файла работают следующие параметры:
    wt wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]
    
    Я не нашел никаких официальных онлайн-ресурсов, объясняющих, почему это работает, корректировки предложений в этом ответе , поэтому я не уверен, должно ли это работать таким образом, или это скрытая / непреднамеренная функция, которая может сломаться в будущих версиях.
harrymc Aug 18 2020 at 16:57

Сообщение об ошибке правильное: Терминал Windows не имеет -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