
La siguiente línea de comando única en un campo de destino de acceso directo del escritorio de Windows hará ping a una dirección y le marcará la hora.
C:\Windows\System32\bash.exe -c "ping 1.0.0.1 | while read line; do echo `date` - $line; done"
Salida de ejemplo:
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
Yo leoaquíese wsl.exe debería usarse en lugar de bash pero no puedo entender cómo crear el comando equivalente.
(Para hacer todo esto en Windows 10 es necesario habilitar el "Subsistema de Windows para Linux" en Windows 10 e instalar Ubuntu desde Microsoft Store segúneste artículo de HTG.)
Respuesta1
La respuesta que vinculó es incorrecta: bash.exe
no ha quedado obsoleta y, en su caso, incluso es obligatoria.
La razón es que, si bien WSL tiene un parámetro de comando, solo permite un único comando, por lo que interpretará la siguiente línea de comando como una única invocación que no funcionará:
Intentar utilizar comandos de shell integrados tampoco funcionará:
En resumen, estás obligado a utilizar el bash
comando para tu ejemplo. Si tiene más de una distribución de Linux instalada en WSL, bash
invocará el shell de la distribución que está definido como predeterminado.
Respuesta2
Yo leoaquíese wsl.exe debería usarse en lugar de bash pero no puedo entender cómo crear el comando equivalente.
Simplemente reemplaza bash.exe -c
con 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"
Esto funciona bien encmd.exe
. ¡Recomiendo probarlo!
2
Ejemplo de salida:
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
Esto lo aprendí yo mismo hace apenas unos días leyendoesta publicación.
Tienes razón en esobash.exe
ha sido obsoleto
(al igual que wslconfig.exe
y lxrun.exe
).
Referencias
- Cómo ejecutar un comando de Linux en WSL desde Windows
- El intérprete de comandos en Windows,
cmd.exe
- Cómo enviar comandos desde Windows a WSL
1
En wsl.exe --exec bash -c
, el bash
es ellinux
comando yno las ventanas bash.exe
dominio.
Esto queda (indirectamente) claro si intentas reemplazar bash
con bash.exe
– y experimentas que no hay salida.
2
Para abrir la línea de comando (como administrador): presione WinKey+ r, escriba cmd
, mantenga presionado
Ctrl+ Shifty presione Enter.
(Luego copie y pegue el comando con Ctrl+ c,
Ctrl+ v.)