寻求等效的 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 10 中启用“适用于 Linux 的 Windows 子系统”,并从 Microsoft Store 安装 Ubuntu这篇 HTG 文章

答案1

您链接的答案是错误的:bash.exe并没有被弃用,并且在您的情况下它甚至是强制性的。

原因是,虽然 WSL 有一个 命令参数,它只允许单个命令,因此它会将以下命令行解释为不起作用的单个调用:

在此处输入图片描述

尝试使用内置的 shell 命令也将不起作用:

在此处输入图片描述

简而言之,您被迫使用该bash命令作为示例。如果您在 WSL 中安装了多个 Linux 发行版,bash将调用定义为默认发行版的 shell。

答案2

我读这里应该使用 wsl.exe 而不是 bash,但我不知道如何创建等效命令。

只需替换bash.exe -cwsl.exe --exec bash -c1

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.exelxrun.exe

参考


1 在 中wsl.exe --exec bash -cbashLinux 命令和不是 Windows bash.exe命令。
如果您尝试bashbash.exe – 替换,并且发现没有输出,这一点(间接地)就很清楚了。

2 要打开命令行(以管理员身份)– 按WinKey+ r,输入cmd,按住 Ctrl+Shift并按Enter。 (然后使用+ 、 +
复制粘贴命令。)CtrlcCtrlv

相关内容