Открыть терминал Ubuntu с помощью пакетного файла в Windows с помощью команды?

Открыть терминал Ubuntu с помощью пакетного файла в Windows с помощью команды?

Я автоматизирую многие процессы в Windows с помощью пакетных файлов и Putty.

Например ( login_server7.bat ):

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

Как запустить терминал Ubuntu и автоматически выполнить команду после открытия файла?

Вместо того, чтобы вручную открывать терминал Ubuntu и вводить команды?

Не могу найти ничего другого по этой теме. С уважением

решение1

Исполняемый файл WSL — C:\Windows\System32\wsl.exe. Вы можете просто ввести wslв командной строке Windows, и вы войдете в экземпляр WSL по умолчанию. Или введите , wsl -hчтобы получить список всех доступных опций. В пакетных файлах вы можете использовать:

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

Или, если вам нужно выполнить команду от имени пользователя root:

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

Вероятно, более правильным способом будет использовать wsl -e -- <command>, но вышеприведенный вариант работает хорошо для меня. Вот более подробный пример:Ubuntu 18.04 на WSL cron daemon не запускается после перезагрузки.

решение2

Как ps4080упоминается в ответе, правильный способ сделать это wsl -e -- <command>(или, как правило wsl -e <command>).

Однако на самом деле существует довольно много нюансов, с которыми вы можете столкнуться при использовании этой техники, и полезно понимать, что происходит с каждым конкретным заклинанием, чтобы при необходимости можно было использовать правильное:

wsl <command>

  • Запускает оболочку по умолчанию для текущего пользователя.
  • ... как неинтерактивная оболочка без входа в систему
  • ... в каталоге, переданном владеющим процессом Windows
  • Работает <command>в этой оболочке

В зависимости от вашей оболочки, вы можете увидеть это с помощью 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

Обратите внимание, что это трудно увидеть, когда bashэто ваша оболочка по умолчанию, поскольку -cэто приводит к неявному exec.

Тот факт, что это выполняется в каталоге владеющего процесса Windows, может быть удобным, поскольку вы можете сделать следующее:

wsl ls -lh

... в PowerShell для получения «человечески читаемых» размеров файлов, что-то такоеудивительно трудно сделатьв противном случае.

Самая сложная часть этого — второй квалификатор. WSL запускает вашу оболочку как нелогинную, неинтерактивную оболочку, когда она запущена таким образом. Это означает, что ~/.bashrcи ~/.bash_profileявляютсянетsourced on startup. Это может вызвать путаницу при попытке запустить команду, которая требует выполнения каких-либо действий в файлах запуска (например, установки переменной среды).

wsl -e <command>

  • Пробежки<command> какоболочка
  • ... в каталоге, переданном процессом-владельцем

Полностью обходит -eоболочку по умолчанию.

> 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

Это может бытьнемногоболее эффективно, поскольку вы избегаете накладных расходов на запуск оболочки, но обычно об этом не стоит беспокоиться.

wsl -e bash -lic <command>

  • Запускается bashкак ваша оболочка (независимо от того, является ли она оболочкой по умолчанию или нет)
  • Заставляет его быть интерактивной оболочкой входа в систему ( -li), так что ~/.bashrcи ~/.bash_profile(и/или другие) являются источниками
  • ... в каталоге, переданном владеющим процессом Windows
  • Работает <command>в этой оболочке

Эту версию следует использовать, если команде требуется что-либо из вашей конфигурации запуска.

Связанный контент