Рейтинг:2

Open Ubuntu terminal using batch file on windows with command?

флаг cn

I automate many processes on windows using batch files and putty.

E.g ( login_server7.bat ):

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

How am I able to start an Ubuntu terminal and run a command automatically after opening a file?

Rather than manually opening the ubuntu terminal and typing my commands in?

Cannot see anything elsewhere on this topic. Regards

Рейтинг:2
флаг vn

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

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

wsl <команда>

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

В зависимости от вашей оболочки вы можете увидеть это с помощью wsl пс -eH:

  PID TTY ВРЕМЯ CMD
    1 ? 00:00:00 начало
   18 ? 00:00:00 начало
   19 ? 00:00:00 начало
   20 б/0 00:00:00 рыба
   28 баллов/0 00:00:00 пс

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

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

всл лс -лх

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

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

wsl -e <команда>

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

полностью обходит вашу оболочку по умолчанию.

> wsl пс -eH
  PID TTY ВРЕМЯ CMD
    1 ? 00:00:00 начало
    7 ? 00:00:00 начало
    8 ? 00:00:00 начало
    9 баллов/0 00:00:00 пс

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

wsl -e bash -lic <команда>

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

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

Рейтинг:2
флаг cn

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

C:\Windows\System32\wsl.exe <ваш скрипт или команда>

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

C:\Windows\System32\wsl.exe sudo <ваш скрипт или команда>

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.