我正在使用带有 zsh/bash shell 的 WSL 的 Ubuntu。我的主机操作系统是 Windows 10。我已经想出了如何安装 Windows 外部驱动器:
sudo mkdir /mnt/d
sudo mount -t drvfs D: /mnt/d
我很少插入这个驱动器,所以我想在插入时自动安装它。如果在我插入驱动器后出现这种情况,那很好,然后启动一个新的 WSL 终端。
我不想将此命令放在一种.bashrc
文件中,因为每次打开终端时都必须输入我的密码会比它的价值更麻烦,特别是如果 99% 的时间,该命令无论如何都会失败。将它放在 bash 脚本中也无济于事,因为我很少运行它,当我需要使用它时,我会忘记我一开始就创建了它。
那么,有没有办法在 WSL 中可用时挂载外部驱动器?
我不知道这是否是一个好的解决方案,但这告诉你如何关闭 sudo 的密码请求。这是我采取的路线:https ://superuser.com/a/1492456/89165
在我看来,这需要两种不同的方法:
WSL 启动时已连接驱动器
第一部分应该很容易。
这很容易克服。将以下内容添加到您的
~/.bashrc
代替:如果驱动器可用,它将安装驱动器。如果没有,它将默默地失败。
WSL 运行时连接驱动器
这并不容易,它可能需要更多的错误处理才能“强大”,但我能够通过创建一个 PowerShell 脚本来实现它:
wsl -u root -e mount -t drvfs /mnt/<driveletter> <Drive>
当事件触发时运行。请注意,这需要在 Windows PowerShell(而不是 PowerShell Core)中运行,因为它使用
WMIEvent
. 我确信有一个使用 CIM 的 PowerShell Core 等价物,但我还没有尝试过这种方式。如果遇到问题,请检查输出。从 PowerShell:
理论上,您可以通过任务计划程序将此脚本设置为在 Windows 登录时运行,但我没有尝试过。我有 80% 的信心它会奏效。您需要通过
powershell
命令调用它(不是pwsh
因为它使用 WMIEvent)。请注意,显然还有一种方法可以通过 CIM 永久注册事件侦听器。上周我在这方面花了一些时间,但是当我遵循一些在我的系统上创建了一个我无法摆脱的 CIM 类的文档时,我陷入了困境。我最终可能会回到它,但希望这对你来说是一个计划任务。我只是不想在“恰到好处”之前推迟发布,因为我可能永远不会完成它。