Поиск эквивалентной командной строки wsl.exe

Поиск эквивалентной командной строки wsl.exe

Следующая командная строка в поле «Цель» ярлыка на рабочем столе Windows выполнит ping-запрос адреса и поставит ему временную метку.

C:\Windows\System32\bash.exe -c "ping 1.0.0.1 | while read line; do echo `date` - $line; done"

Пример вывода:

Fri Nov 27 14:08:05 CST 2020 - PING 1.0.0.1 (1.0.0.1) 56(84) bytes of data.
Fri Nov 27 14:08:05 CST 2020 - 64 bytes from 1.0.0.1: icmp_seq=1 ttl=58 time=26.7 ms
Fri Nov 27 14:08:06 CST 2020 - 64 bytes from 1.0.0.1: icmp_seq=2 ttl=58 time=35.5 ms
Fri Nov 27 14:08:07 CST 2020 - 64 bytes from 1.0.0.1: icmp_seq=3 ttl=58 time=42.0 ms

Я читаюздесьчто wsl.exe следует использовать вместо bash, но я не могу понять, как создать эквивалентную команду.

(Чтобы сделать что-либо из этого в Windows 10, необходимо включить «Подсистему Windows для Linux» в Windows 10 и установить Ubuntu из Microsoft Store согласноэта статья HTG.)

решение1

Ответ, на который вы ссылаетесь, неверен: bash.exeон не устарел, а в вашем случае даже является обязательным.

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

введите описание изображения здесь

Попытка использовать встроенные команды оболочки также не сработает:

введите описание изображения здесь

Короче говоря, вы вынуждены использовать bashкоманду для вашего примера. Если у вас установлено более одного дистрибутива Linux в WSL, bashбудет вызвана оболочка дистрибутива, который определен как дистрибутив по умолчанию.

решение2

Я читаюздесьчто wsl.exe следует использовать вместо bash, но я не могу понять, как создать эквивалентную команду.

Просто замените bash.exe -cна wsl.exe --exec bash -c: 1

C:\Windows\System32\wsl.exe --exec bash -c
 "ping 1.0.0.1 | while read line; do echo `date` - $line; done"

Это отлично работает вcmd.exe. Рекомендую попробовать! 2

Пример вывода:

date - PING 1.0.0.1 (1.0.0.1) 56(84) bytes of data.
date - 64 bytes from 1.0.0.1: icmp_seq=1 ttl=56 time=4.58 ms
date - 64 bytes from 1.0.0.1: icmp_seq=2 ttl=56 time=4.31 ms
^C

Я сам узнал об этом всего несколько дней назад, прочитавэта почта.

Вы правы, чтоbash.exeбыл устарел (как wslconfig.exeи lxrun.exe).

Рекомендации


1 В wsl.exe --exec bash -c, bashэтоЛинукс команда ине Windows bash.execommand.
Это (косвенно) ясно, если вы попробуете заменить bashна bash.exe – и увидите, что тогда нет никакого вывода.

2 Чтобы открыть командную строку (как администратор) – нажмите WinKey+ r, введите cmd, удерживайте Ctrl+ Shiftи нажмите Enter.
(Затем скопируйте и вставьте команду с помощью Ctrl+ c, Ctrl+ v.)

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