今天我只是想检查一下我的windows工作站上是否安装了一个特定的子系统。所以我使用的是Windows Subsystem for Linux(WSL),并安装了从微软商店可以买到的Ubuntu。现在我正在尝试找到一种方法来检查它是否以编程的方式安装。
我有以下输出:
PS C:\> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
我需要知道是否安装了“Ubuntu-20.04”。我尝试了很多方法,但没有像这样的相关:
$state = wsl -l -v
if($state -like '*Ubuntu*') {
Write-Host 'Installed'
} else {
Write-Host 'Nope'
}
但是没有工作。你有线索给我吗?谢谢大家!
4条答案
按热度按时间3htmauhk1#
这似乎是一个编码问题。在您的字符串中有(不可见的)空字符。我仍在尝试找出处理它的最佳方法。
与此同时......这里有一个快速解决方案:
另一种解决方法,但这将更改整个会话的编码:
xe55xuns2#
如果你是从WSL或者Windows Git Bash运行
wsl
,你可以用这个来转换:z4iuyo4d3#
您的示例代码现在可以在最新的WSL预览版本(0.64.0)中使用选择加入修复程序正常工作,但请注意(至少在预览中)它仅对Windows 11用户可用。
要选择加入(这样当您实现了类似前面答案的解决方案时,就不会意外地破坏旧代码),只需将
WSL_UTF8
环境变量设置为1
值(只有此值才有效)。例如,在PowerShell中:
如果需要,也可以在Windows中全局设置。
如果从 * 内部 * WSL本身运行
wsl.exe
,请参见this answer以获取使用WSLENV
的示例代码。yb3bgrhw4#
演示了wsl如何输出utf 16 le。所以偶数字节为空“0”。如果你有emacs,你可以在一个文件上运行esc-x hexl模式来得到类似的显示。据我所知,在powershell中没有等价的iconv。