
Следующая командная строка в поле «Цель» ярлыка на рабочем столе 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
).
Рекомендации
- Как запустить команду Linux в WSL из Windows
- Интерпретатор команд в Windows,
cmd.exe
- Как отправлять команды из Windows в WSL
1
В wsl.exe --exec bash -c
, bash
этоЛинукс
команда ине Windows bash.exe
command.
Это (косвенно) ясно, если вы попробуете заменить bash
на bash.exe
– и увидите, что тогда нет никакого вывода.
2
Чтобы открыть командную строку (как администратор) – нажмите WinKey+ r, введите cmd
, удерживайте
Ctrl+ Shiftи нажмите Enter.
(Затем скопируйте и вставьте команду с помощью Ctrl+ c,
Ctrl+ v.)