¿Abrir la terminal de Ubuntu usando un archivo por lotes en Windows con el comando?

¿Abrir la terminal de Ubuntu usando un archivo por lotes en Windows con el comando?

Automatizo muchos procesos en Windows usando archivos por lotes y PuTTY.

Por ejemplo (login_server7.bat):

start C:\Users\Jack\Documents\putty.exe -ssh 1.1.1.1 -l user123 -pw "bleh"

¿Cómo puedo iniciar una terminal de Ubuntu y ejecutar un comando automáticamente después de abrir un archivo?

¿En lugar de abrir manualmente la terminal de Ubuntu y escribir mis comandos?

No puedo ver nada en otra parte sobre este tema. Saludos

Respuesta1

El ejecutable de WSL es C:\Windows\System32\wsl.exe. Puede simplemente escribir wslel símbolo del sistema de Windows e iniciará sesión en la instancia WSL predeterminada. O escriba wsl -hpara obtener la lista de todas las opciones disponibles. En archivos por lotes puede utilizar:

C:\Windows\System32\wsl.exe <your script or command>

O si necesita ejecutar el comando como root:

C:\Windows\System32\wsl.exe sudo <your script or command>

Probablemente la forma más correcta sea usar wsl -e -- <command>, pero lo anterior funciona bien para mí. Aquí hay un ejemplo más detallado:Ubuntu 18.04 en el demonio cron WSL no se ejecuta después del reinicio.

Respuesta2

Como ps4080menciona la respuesta, la forma correcta de hacer esto es wsl -e -- <command>(o, normalmente wsl -e <command>).

Sin embargo, en realidad hay bastantes matices con los que te puedes topar con esta técnica, y es bueno entender qué sucede con cada encantamiento exacto para que puedas usar el correcto cuando sea necesario:

wsl <command>

  • Ejecuta el shell predeterminado para el usuario actual.
  • ... como un shell no interactivo y sin inicio de sesión
  • ... en el directorio pasado por el proceso propietario de Windows
  • Corre <command>en ese caparazón

Dependiendo de tu shell, puedes ver esto con wsl ps -eH:

  PID TTY          TIME CMD
    1 ?        00:00:00 init
   18 ?        00:00:00   init
   19 ?        00:00:00     init
   20 pts/0    00:00:00       fish
   28 pts/0    00:00:00         ps

Tenga en cuenta que es difícil ver esto cuando bashes su shell predeterminado, ya que -cda como resultado un archivo exec.

El hecho de que esto se ejecute en el directorio del proceso propietario de Windows puede ser útil, ya que puedes hacer:

wsl ls -lh

... en PowerShell para obtener tamaños de archivos "legibles por humanos", algo que essorprendentemente difícil de hacerde lo contrario.

La parte más complicada de esto es el segundo clasificatorio. WSL ejecuta su shell como un shell no interactivo y sin inicio de sesión cuando se inicia de esta manera. Esto significa que ~/.bashrcy ~/.bash_profilesonnoobtenido al inicio. Esto puede causar confusión al intentar ejecutar un comando que requiere que se haga algo en los archivos de inicio (por ejemplo, configurar una variable de entorno).

wsl -e <command>

  • Carreras<command> comola cáscara
  • ... en el directorio pasado por el proceso propietario

Esto -eomite por completo su shell predeterminado.

> wsl ps -eH
  PID TTY          TIME CMD
    1 ?        00:00:00 init
    7 ?        00:00:00   init
    8 ?        00:00:00     init
    9 pts/0    00:00:00       ps

Esto puede serlevementemás eficiente ya que evita la sobrecarga de inicio del shell, pero normalmente no vale la pena preocuparse por ello.

wsl -e bash -lic <command>

  • Se ejecuta bashcomo su shell (independientemente de si es el shell predeterminado o no)
  • Lo obliga a ser un shell interactivo ( -li) de inicio de sesión para que ~/.bashrcy ~/.bash_profile(y/u otros) se obtengan
  • ... en el directorio pasado por el proceso propietario de Windows
  • Corre <command>en ese caparazón

Esta es la versión que se debe usar si el comando necesita algo de su configuración de inicio.

información relacionada