Cómo iniciar WSL en la terminal de Windows mediante programación y ejecutar el comando

Aug 18 2020

Me gustaría iniciar Ubuntu WSL [shell: bash] dentro de la Terminal de Windows desde un archivo por lotes y pasar un comando, que debería ejecutarse inmediatamente después del inicio.

  • Al iniciar WSL directamente, puedo hacer esto usando el -cargumento; Por ejemplo, lo siguiente abre WSL y establece una conexión SSH con algunos reenvíos de puertos locales:
    bash -c "ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]"
    

¿Cómo puedo lograr esto usando Windows Terminal?

Respuestas

1 suamikim Aug 18 2020 at 22:19

Encontré dos formas, ambas funcionando hasta ahora:

  1. Crear un perfil dedicado:
    la commandlineopción también acepta argumentos, que se pasan directamente al shell en el inicio, lo que permite el uso directo de wsl.execon un "comando de inicio" 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]",
    }
    
    Ahora puedo iniciar el shell a través de un archivo por lotes, que se ejecuta usando lo siguiente; sin embargo, la desventaja es que el nuevo perfil se muestra en el menú de selección de perfil de la terminal de Windows :
    wt -p "Ubuntu SSH"
    

  2. Pasar commandlinea wt:
    como se muestra en la Opción 1, la commandlineopción puede incluir más parámetros para el shell de destino, con lo siguiente funcionando cuando se llama desde un archivo por lotes:
    wt wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]
    
    No encontré ningún recurso oficial en línea que explique por qué funciona, ajustando las sugerencias en esta respuesta , por lo que no estoy seguro de si se supone que funciona de esta manera o si es una característica oculta / involuntaria que podría fallar en versiones futuras.
harrymc Aug 18 2020 at 16:57

El mensaje de error es correcto: Windows Terminal no tiene un -cparámetro.

La sintaxis es:

wt [options] [command ; ]

Donde las únicas opciones son:

  -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