Como iniciar o WSL no terminal do Windows de forma programática e executar o comando

Aug 18 2020

Gostaria de iniciar o Ubuntu WSL [shell: bash] dentro do Terminal do Windows a partir de um arquivo em lote e passar um comando, que deve ser executado imediatamente após a inicialização.

  • Ao iniciar diretamente o WSL, posso fazer isso usando o -cargumento; por exemplo, o seguinte abre WSL e estabelece uma conexão SSH com alguns encaminhamentos de porta local:
    bash -c "ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]"
    

Como eu faria isso usando o Terminal do Windows?

Respostas

1 suamikim Aug 18 2020 at 22:19

Encontrei duas maneiras, com ambas funcionando até agora:

  1. Criar um perfil dedicado:
    a commandlineopção também aceita argumentos, que são passados ​​diretamente para o shell na inicialização, permitindo o uso direto de wsl.execom um "comando de inicialização" adicional:
    {
      "guid": "{...}",
      "hidden": false,
      "name": "Ubuntu SSH",
      "commandline": "wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]",
    }
    
    Agora posso iniciar o shell por meio de um arquivo em lote, que é executado usando o abaixo; no entanto, a desvantagem é que o novo perfil é mostrado no menu de seleção de perfil do Terminal Windows :
    wt -p "Ubuntu SSH"
    

  2. Passe commandlinepara wt:
    Conforme mostrado na Opção 1, a commandlineopção pode incluir outros parâmetros para o shell de destino, com o seguinte funcionando quando chamado de um arquivo em lote:
    wt wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]
    
    Não encontrei nenhum recurso online oficial explicando por que isso funciona, ajustando as sugestões nesta resposta , então não tenho certeza se isso deveria funcionar dessa forma ou se é um recurso oculto / não intencional que pode falhar em versões futuras.
harrymc Aug 18 2020 at 16:57

A mensagem de erro está correta: O Terminal do Windows não possui um -cparâmetro.

A sintaxe é:

wt [options] [command ; ]

Onde as únicas opções são:

  -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