在 WSL 中通过 Bash 函数快速转换 Windows 路径为 Ansible/WSL 路径 - 教程

在使用 Ansible 或其他自动化工具时,我们常常需要将 Windows 下的路径 转换成 WSL/Unix 可识别的路径。虽然可以写 Python 脚本完成这个任务,但每次运行 Python 还是有些麻烦。这时可以用 Bash 函数,直接在 WSL 终端中实现路径转换,一次配置,全局可用。

WSL(Ubuntu 子系统)和 Windows 磁盘的映射关系

WSL 里,Windows 的每个盘符都会挂载到 /mnt/ 目录下:

Windows 盘符WSL 对应路径
C:/mnt/c/
D:/mnt/d/
E:/mnt/e/

所以 Windows 上的文件路径:

D:\ansible\ansible_quickstart\inventory.ini

在 WSL 里就是:

/mnt/d/ansible/ansible_quickstart/inventory.ini
路径书写规则
  1. 盘符小写D:/mnt/d/

  2. 反斜杠换成正斜杠\/

  3. 大小写敏感:WSL 目录名和文件名大小写敏感

  4. 空格处理:如果路径有空格,需要用引号或者转义,例如:

cd "/mnt/d/My Files/ansible_quickstart"

或者

cd /mnt/d/My\ Files/ansible_quickstart

步骤一:打开 WSL 终端

启动你安装的 Ubuntu WSL 子系统,你会看到类似:

root@TJ-YF-262JKT:~$

步骤二:编辑 Bash 配置文件

~/.bashrc 是 Bash 的配置文件,每次打开终端都会自动执行。我们可以把函数写入其中,让它全局可用。

nano ~/.bashrc

也可以使用 vi ~/.bashrc 或 VS Code 打开:code ~/.bashrc


步骤三:在文件末尾添加 Bash 函数

# 将 Windows 路径转换为 Ansible/WSL 可识别路径
win2ansible() {
path="$1"
# 替换反斜杠 \ 为正斜杠 /
# 然后将盘符 C: -> /mnt/c
converted=$(echo "$path" | sed -E 's#\\#/#g' | sed -E 's#^([A-Za-z]):#/mnt/\L\1#')
echo "$converted"
}

每行解释:

  1. win2ansible() { ... }
    定义函数名为 win2ansible

  2. path="$1"
    $1 是函数第一个参数,也就是你输入的 Windows 路径。

  3. converted=$(echo "$path" | sed -E 's#\\#/#g' | sed -E 's#^([A-Za-z]):#/mnt/\L\1#')

    • 第一个 sed:把所有 \ 替换成 /
    • 第二个 sed:把盘符开头(如 D:)转换为 /mnt/d
  4. echo "$converted"
    输出转换后的路径。


步骤四:保存并退出

如果你使用 nano 编辑器:

  1. Ctrl + O 保存
  2. Enter 确认
  3. Ctrl + X 退出

步骤五:让函数立即生效

source ~/.bashrc

这一步很重要,否则函数在当前终端还不能使用。


步骤六:使用函数转换路径

win2ansible "D:\ansible\ansible_quickstart"

输出:

/mnt/d/ansible/ansible_quickstart

如果是网络共享路径:

win2ansible "\\server\share\project"

输出:

/server/share/project

(网络共享路径可能需要稍微调整 sed,此函数主要处理本地盘符路径)

posted on 2025-09-18 18:11  ljbguanli  阅读(21)  评论(0)    收藏  举报