Szukam odpowiednika wiersza poleceń wsl.exe

Nov 28 2020

Poniższy pojedynczy wiersz polecenia w polu docelowym skrótu pulpitu systemu Windows spowoduje wysłanie polecenia ping na adres i oznaczenie go datą.

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

Przykładowe dane wyjściowe:

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

Czytałem tutaj, że zamiast bash powinien być używany wsl.exe, ale nie mogę dowiedzieć się, jak utworzyć równoważne polecenie.

(Aby zrobić to w systemie Windows 10, musisz włączyć „Podsystem Windows dla systemu Linux” w systemie Windows 10 i zainstalować Ubuntu ze sklepu Microsoft Store zgodnie z tym artykułem HTG ).

Odpowiedzi

harrymc Nov 28 2020 at 04:07

Podana przez Ciebie odpowiedź jest nieprawidłowa: bash.exenie została wycofana, aw Twoim przypadku jest nawet obowiązkowa.

Powodem jest to, że chociaż WSL ma parametr polecenia , zezwala tylko na jedno polecenie, więc zinterpretuje następującą linię poleceń jako pojedyncze wywołanie, które nie zadziała:

Próba użycia wbudowanych poleceń powłoki również nie zadziała:

Krótko mówiąc, jesteś zmuszony użyć bashpolecenia na swoim przykładzie. Jeśli masz więcej niż jedną dystrybucję Linuksa zainstalowaną w WSL, bashwywoła powłokę dystrybucji, która jest zdefiniowana jako domyślna.