我知道 WindowsC:\
驱动器在 Windows Subsystem for Linux 中显示为/mnt/c
。但是,在 bash Git 钩子脚本中,C:\
驱动器显示为/c
,而不是/mnt/c
。
有没有办法在 bash 脚本中确定应如何C:\
引用驱动器?换句话说,有没有办法确定是否应使用/mnt/c
或 来构建路径/c
?
答案1
适用于 Windows 的 Git领域:
这里的 POSIX 功能由系统管理软件共享动态库(又称 DLL),并/bin/git.exe
针对该环境进行交叉编译(PE)。此环境中的挂载点是与 UNIX 系统相同,由 进行配置/etc/fstab
。示例如下:
none / cygdrive binary,posix=0,noacl,user 0 0
因此,Windows 驱动器被安装在/
(根)文件夹中。例如,C:\
变为/c
。这是默认选项。用户可以将其更改为所需的值。
适用于 Linux 的 Windows 子系统领域:
这里 WSL 执行真正的ELF64 二进制文件是从 派生出来的/init
。挂载点由该 init 二进制文件和 Lx 子系统会话管理器服务 (LxssManager) 管理。默认情况下,所有 Windows 分区都挂载在/mnt
文件夹中。从 Insider Build 17093 开始,可以使用文件配置挂载点/etc/wsl.conf
。阅读这篇博文仔细查看更多信息。以下是示例:
[automount]
enabled = true
mountFsTab = true
root = /
options = "metadata,umask=22,fmask=11"
简而言之,这个文件:
enabled
:自动挂载 Windows 驱动器。mountFsTab
/etc/fstab
:从文件自动挂载用户配置的驱动器。root
:将安装 Windows 驱动器的目录。options
:Windows 驱动器的挂载选项。这些与mount -o
命令相同。
答案2
您的问题有点不切实际,因为它做出了错误的假设。首先,Windows 驱动器可以以不同的方式安装 - 本地磁盘、SMB 安装、NFS 安装。
/mnt/c 可能适用于您的发行版,但它并不是特别常见,并且在使用 /media?deviceid/ 的 Ubuntu 类型发行版中并非如此 - 其中,deviceid 不是驱动器号。
同样,“C”驱动器也相当随意 - Linux 确实有一个驱动器结构 - 因此如果它是本地硬盘驱动器,您可能可以找到一种方法来扫描 /dev/sd*? 中的 NTFS 分区并查看它们是否已安装。这不是一个好的通用解决方案,因为它做出了很多假设,而这些假设往往是不正确的 - 您最好提示输入路径。
另一种(容易出错的)方法可能是假设磁盘已安装,然后使用df
并解析每个(非共享内存)系统的 windows/