尋求等效的 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

相關內容