Abrir o terminal Ubuntu usando arquivo em lote no Windows com comando?

Abrir o terminal Ubuntu usando arquivo em lote no Windows com comando?

Eu automatizo muitos processos no Windows usando arquivos em lote e massa.

Por exemplo ( login_server7.bat ):

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

Como posso iniciar um terminal Ubuntu e executar um comando automaticamente após abrir um arquivo?

Em vez de abrir manualmente o terminal do Ubuntu e digitar meus comandos?

Não consigo ver nada em outro lugar sobre este tópico. Cumprimentos

Responder1

O executável do WSL é C:\Windows\System32\wsl.exe. Você pode simplesmente digitar wslno prompt de comando do Windows e estará conectado à instância WSL padrão. Ou digite wsl -hpara obter a lista de todas as opções disponíveis. Em arquivos em lote você pode usar:

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

Ou se você precisar executar o comando como root:

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

Provavelmente a maneira mais correta é usar wsl -e -- <command>, mas o procedimento acima funciona bem para mim. Aqui está um exemplo mais detalhado:Ubuntu 18.04 no daemon cron WSL não funciona após a reinicialização.

Responder2

Como ps4080a resposta menciona, a maneira certa de fazer isso é wsl -e -- <command>(ou normalmente wsl -e <command>).

No entanto, existem algumas nuances que você pode encontrar com esta técnica, e é bom entender o que está acontecendo com cada encantamento exato para que você possa usar o correto quando necessário:

wsl <command>

  • Executa o shell padrão para o usuário atual
  • ... como um shell não interativo e sem login
  • ... no diretório passado pelo processo proprietário do Windows
  • Executa <command>nesse shell

Dependendo do seu shell, você pode ver isso com 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

Observe que é difícil ver isso quando bashé seu shell padrão, pois -cresulta em um arquivo exec.

O fato de ser executado no diretório do processo proprietário do Windows pode ser útil, pois você pode fazer:

wsl ls -lh

... no PowerShell para obter tamanhos de arquivo "legíveis por humanos", algo que ésurpreendentemente difícil de fazerde outra forma.

A parte mais complicada disso é a segunda qualificação. WSL executa seu shell como um shell sem login e não interativo quando iniciado dessa maneira. Isso significa que ~/.bashrce ~/.bash_profilesãonãooriginado na inicialização. Isto pode causar confusão ao tentar executar um comando que requer que algo seja feito nos arquivos de inicialização (por exemplo, definir uma variável de ambiente).

wsl -e <command>

  • Corre<command> comoA concha
  • ... no diretório passado pelo processo proprietário

O -eignora completamente o seu shell padrão.

> 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

Isso pode serum poucomais eficiente, pois evita a sobrecarga de inicialização do shell, mas normalmente não vale a pena se preocupar.

wsl -e bash -lic <command>

  • Executa bashcomo seu shell (independentemente de ser o shell padrão ou não)
  • Força que seja um login, shell interativo ( -li) para que ~/.bashrce ~/.bash_profile(e/ou outros) sejam originados
  • ... no diretório passado pelo processo proprietário do Windows
  • Executa <command>nesse shell

Esta é a versão a ser usada se o comando precisar de alguma coisa da sua configuração de inicialização.

informação relacionada