Come avviare WSL nel terminale di Windows a livello di codice ed eseguire il comando

Aug 18 2020

Vorrei avviare Ubuntu WSL [shell: bash] all'interno di Windows Terminal da un file batch e passare un comando, che dovrebbe essere eseguito immediatamente dopo l'avvio.

  • Quando si avvia direttamente WSL, sono in grado di farlo utilizzando l' -cargomento; ad esempio, quanto segue apre WSL e stabilisce una connessione SSH con alcuni port forwarding locali:
    bash -c "ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]"
    

Come potrei ottenere ciò utilizzando Windows Terminal?

Risposte

1 suamikim Aug 18 2020 at 22:19

Ho trovato due modi, entrambi funzionanti finora:

  1. Crea un profilo dedicato:
    L' commandlineopzione accetta anche argomenti, che vengono passati direttamente alla shell all'avvio, consentendo l'uso diretto di wsl.execon un "comando di avvio" aggiuntivo:
    {
      "guid": "{...}",
      "hidden": false,
      "name": "Ubuntu SSH",
      "commandline": "wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]",
    }
    
    Ora posso avviare la shell tramite un file batch, che viene eseguito utilizzando il seguente; tuttavia, lo svantaggio è che il nuovo profilo viene mostrato nel menu di selezione del profilo del terminale di Windows :
    wt -p "Ubuntu SSH"
    

  2. Passa commandlinea wt:
    come mostrato nell'opzione 1, l' commandlineopzione può includere ulteriori parametri per la shell di destinazione, con il funzionamento seguente quando viene richiamato da un file batch:
    wt wsl.exe ssh -L 3306:localhost:3306 -L 5900:localhost:5900 -L 8001:localhost:8001 [email protected]
    
    Non ho trovato alcuna risorsa online ufficiale che spieghi perché funziona, modificando i suggerimenti in questa risposta , quindi non sono sicuro se dovrebbe funzionare in questo modo o se si tratta di una funzionalità nascosta / involontaria che potrebbe interrompersi nelle versioni future.
harrymc Aug 18 2020 at 16:57

Il messaggio di errore è corretto: Windows Terminal non dispone di un -cparametro.

La sintassi è:

wt [options] [command ; ]

Dove le uniche opzioni sono:

  -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