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 -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
是Linux
命令和不是 Windows bash.exe
命令。
如果您尝试bash
用bash.exe
– 替换,并且发现没有输出,这一点(间接地)就很清楚了。
2
要打开命令行(以管理员身份)– 按WinKey+ r,输入cmd
,按住
Ctrl+Shift并按Enter。 (然后使用+ 、 +
复制粘贴命令。)CtrlcCtrlv