我正在尝试简化/自动化我在 Windows 中的开发环境,我有很多我在 Windows 和 Linux 子系统上运行的 shell 文件,我最近开始编辑我/etc/wsl.conf
的 to 设置
[automount]
root = /
这使我的路径到 windows /c/... 而不是 /mnt/c/... 这简化了我的许多脚本的文件访问,允许脚本从主机调用到 wsl 或再次调用,并允许我无缝地实现自动化在这两种环境中。我的问题是每次启动wsl后我还需要运行sudo mount --make-shared /c/
,以便我的脚本可以正确地到达另一个系统,我知道我可以使用mountFsTab
但在所有的事情中,我对 Fstab 文件非常业余,并且有一段时间没有模拟过,更不用说在 wsl 下使用它了,并且想知道是否有人可以指出我正确的方向来设置我的 /c / 挂载为共享驱动器,因此我可以进行简单的双向通信,并且不要浪费时间,因为我在开始工作之前忘记运行 make-shared 命令,然后对我的设置感到困惑?如果还有与使用 Fstab 不同的方法,但只是配置 wsl.conf 会更好,我只是在 Microsoft 的文档中没有找到任何关于这样做的简单内容。无论如何,提前谢谢。
我不确定我是否完全理解您在共享挂载处重新挂载
/
或使用共享挂载的用例,但我真的很想这样做。我将以我目前对您的问题的理解来回答,但我希望看到您对其进行编辑以提供有关用例的更多详细信息。完全有可能为您的工作流程提供一些更好的选择。
也就是说,您的核心问题看起来很简单:
总结一下:
正如您所注意到的,Windows 驱动器是由 WSL
/init
而不是/etc/fstab
. 虽然可以通过挂载选项(例如实际挂载点/ )进行一些控制,但挂载传播并不是这些选项之一。/etc/wsl.conf
uid
gid
shared
你有几个选择:
添加一个条目,
/etc/fstab
使用该shared
选项重新安装驱动器。我发现通过将当前挂载表条目复制到以下位置最容易做到这/etc/mtab
一点/etc/fstab
:当然,
grep
在复制之前测试第一个可能是个好主意,只是为了确保它返回您想要的行。然后编辑
/etc/fstab
并添加shared
到选项的开头。例如,就在rw
选项之前。您需要退出 WSL,
wsl --terminate <distro>
然后重新启动才能使其生效,但我可以确认这适用于启动 WSL 并将驱动器安装为共享。如果您只想
mount --make-shared /c/
在 WSL 启动时运行,还有两个附加选项。首先,对于 Windows 11,您可以将以下内容添加到您的/etc/wsl.conf
:如果您需要运行多个命令,请在单个
command=
字符串中使用分号将它们连接起来。此命令
root
在 WSL 启动时运行,因此无需sudo
或输入密码。如果您没有(并且当前无法升级)到 Windows 11,您始终可以将该命令添加到您的
~/.bash_profile
(或其他适用的启动文件)。这里有一个巧妙的技巧,可以让你也不必使用sudo
。将以下内容添加到您的~/.bash_profile
:以 root 用户运行 WSL 并执行
mount
命令。重要说明:如果您正在编写 WSL 脚本,您最终可能会从 PowerShell、CMD 或其他脚本运行类似这样的其他命令。当使用命令(非交互式)执行时,WSL通常不会将 shell 作为登录或交互式 shell 运行。因此,如果您有运行需要
~/.bash_profile
加载的脚本(或其他启动文件),请确保使用wsl.exe -e bash -lic "command"
. 这将在“登录”(源配置文件脚本)和“交互式”(源 rc 脚本)的 bash shell 中运行命令。请注意,我已通过以下方式确认了这些工作:
测试后,我禁用了该选项,终止了实例,并重新检查以确保传播回到
private
.