来自 WSL2 shell 的别名 CMD 命令

Has*_*ziz 2 bash bash-alias cmd.exe windows-10 windows-subsystem-for-linux

我在 Windows 10 上运行 WSL2,并且希望能够在不退出 Linux shell 的情况下从中运行 CMD 命令。具体来说,我想做的是:

wmic diskdrive get Model,Manufacturer,Size,DeviceID,Status,InterfaceType
Run Code Online (Sandbox Code Playgroud)

我如何使用 WSL2 做到这一点?

Has*_*ziz 5

其他比我更有知识的人可能知道更好的方法或能够提出改进建议,但我能想到解决这个问题的最简单方法是使用 Bash 别名。我创建了一个名为lsd(列表设备或磁盘的缩写的别名无需离开 WSL shell 即可运行它,同时它与在 CMD 本身中运行命令一样


从 WSL shell 导航到您的主文件夹:

cd ~
Run Code Online (Sandbox Code Playgroud)

...并在 Windows 资源管理器中打开它:

explorer.exe .
Run Code Online (Sandbox Code Playgroud)

使用 Sublime Text 等纯文本编辑器打开.bashrc主文件夹中的文件,并将以下行添加到其底部:

alias lsd="cmd.exe /c '*wmic diskdrive get Model,Manufacturer,Size,DeviceID,Status,InterfaceType'"
Run Code Online (Sandbox Code Playgroud)

lsd这将创建一个运行 CMD 实例的别名(出于所有意图和目的的另一个命令) ,该实例wmic在终止自身之前执行该命令。请记住将我wmic上面的命令替换为您要运行的 CMD 命令。

保存.bashrc文件,然后通过执行以下操作将其加载到 shell 中:

. ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

然后,您可以像任何其他 WSL 命令一样运行别名:

$ lsd

'\\wsl$\Ubuntu-18.04\home\user'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.
DeviceID            InterfaceType  Manufacturer            Model                                 Size           Status
\\.\PHYSICALDRIVE0  IDE            (Standard disk drives)  WDC WD10PURX-64E5EY0                  1000202273280  OK
\\.\PHYSICALDRIVE4  IDE            (Standard disk drives)  WDC WD30EZRZ-00GXCB0                  3000590369280  OK
\\.\PHYSICALDRIVE2  IDE            (Standard disk drives)  CT250MX500SSD1                        250056737280   OK
\\.\PHYSICALDRIVE6  USB            (Standard disk drives)  Seagate GoFlex Desk USB Device        3000582144000  OK
\\.\PHYSICALDRIVE1  IDE            (Standard disk drives)  KINGSTON SV200S3128G                  128034708480   OK
\\.\PHYSICALDRIVE3  IDE            (Standard disk drives)  ST2000DM001-9YN164                    2000396321280  OK
\\.\PHYSICALDRIVE5  USB            (Standard disk drives)  Kingston DataTraveler 3.0 USB Device  15471751680    OK
Run Code Online (Sandbox Code Playgroud)

如上所示,我的别名实现确实存在一个非致命错误,即该命令在执行之前返回路径错误,但我没有时间弄清楚如何解决此问题(此处的后续问题) 。无论如何,Windows 会自行纠正该问题,这意味着它不会阻止 CMD 命令正常执行,而且它唯一真正的危害是使输出比应有的更难看。