我正在运行 Windows 10 / WSL2 / Ubuntu 20.04,并尝试ifconfig eth0 | grep 'inet ' | awk '{ print $2 }'
在 PowerShell 中执行此操作。以下是我想出的办法:
wsl ifconfig eth0 | wsl grep 'inet ' | wsl awk '{ print $2 }'
wsl grep
在 PowerShell 中可以像grep
在 Ubuntu 中一样工作,但wsl awk
在 PowerShell 中不能像awk
在 Ubuntu 中一样工作。
有任何想法吗?
答案1
将整个命令作为一个大的 bash 命令一次发送到 WSL,而不是 3 个单独的 WSL 调用,例如:
wsl bash -c "ifconfig eth0 | grep 'inet ' | awk '{ print \`$2 }'"
答案2
$
这似乎是有关特殊字符“ ”(变量的前缀字符)的转义字符的问题。
在 Windows CMD WSL 中,插入符号 ( ^
) 在许多情况下可以很好地转义特殊字符。例如,
wsl ifconfig eth0 | wsl grep 'inet ' | wsl awk '{ print ^$2 }'
在 Windows PowerShell 中,反斜杠 ( \\
) 和反引号 ( `
) 以及一些字符可以逐个转义特殊字符。
wsl ifconfig eth0 | wsl grep 'inet ' | wsl awk '{ print \$2 }'
wsl bash -c "ifconfig eth0 | grep 'inet ' | awk '{ print \`$2 }'"
在 bash shell 中,反斜杠\\
也有效。
ifconfig eth0 | grep 'inet ' | awk '{ print \$2 }'