重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
docker-git-bash-guide by josiahsiegel/claude-plugin-marketplace
npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill docker-git-bash-guide本技能提供在 Windows 上的 Git Bash (MINGW) 中处理 Docker 命令的全面指导,特别关注卷挂载路径转换问题及其解决方案。
在 Windows 上的 Git Bash (MINGW) 或 MSYS2 中运行 Docker 命令时,自动路径转换可能导致卷挂载和其他 Docker 命令出现严重问题。
MSYS/MINGW shell 在调用 Windows 可执行文件(如 docker.exe)时,会自动转换看起来像 Unix 路径的参数:
问题转换示例:
# 您输入的命令:
docker run -v /c/Users/project:/app myimage
# Docker 实际接收到的命令(已损坏):
docker run -v C:\Program Files\Git\c\Users\project:/app myimage
触发路径转换的条件:
/)/foo:/bar)- 或 , 后跟路径组件的参数广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
免于转换的情况:
= 的参数(变量赋值)C:); 的参数(已是 Windows 格式)// 开头的参数(网络路径/Windows 开关)使用这些环境变量来检测何时可能出现路径转换问题:
# 最可靠的方法:检查 MSYSTEM
if [ -n "$MSYSTEM" ]; then
echo "在 Git Bash/MINGW 中运行 - 需要路径转换处理"
fi
# 替代方法:检查 uname
if [[ "$(uname -s)" == MINGW* ]]; then
echo "在 MINGW 环境中运行"
fi
# 要检查的环境变量:
# MSYSTEM 值:MINGW64, MINGW32, MSYS
这是 Windows 上 Git Bash 最可靠的解决方案。
在每个 Docker 命令前添加 MSYS_NO_PATHCONV=1 前缀:
# 使用 $(pwd) 进行卷挂载
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# 使用绝对路径进行卷挂载
MSYS_NO_PATHCONV=1 docker run -v /c/Users/project:/app myimage
# 多个卷挂载
MSYS_NO_PATHCONV=1 docker run \
-v $(pwd)/data:/data \
-v $(pwd)/config:/etc/config \
myimage
在会话中为所有 Docker 命令禁用路径转换:
# 添加到 ~/.bashrc 或在当前 shell 中运行
export MSYS_NO_PATHCONV=1
# 现在所有 Docker 命令都能正常工作
docker run -v $(pwd):/app myimage
创建一个自动禁用路径转换的函数包装器:
# 添加到 ~/.bashrc
docker() {
(export MSYS_NO_PATHCONV=1; command docker.exe "$@")
}
# 或为 MSYS2 使用 MSYS2_ARG_CONV_EXCL
docker() {
(export MSYS2_ARG_CONV_EXCL='*'; command docker.exe "$@")
}
# 使函数在子 shell 中可用
export -f docker
适用于 MSYS2 环境(非标准 Git Bash):
# 禁用所有参数转换
export MSYS2_ARG_CONV_EXCL='*'
# 选择性排除(特定模式)
export MSYS2_ARG_CONV_EXCL='--dir=;/test'
# 环境变量转换排除
export MSYS2_ENV_CONV_EXCL='*'
在路径前添加额外的 / 以防止转换:
# 单斜杠(已转换 - 损坏)
docker run -v /c/Users/project:/app myimage
# 双斜杠(未转换 - 有效)
docker run -v //c/Users/project:/app myimage
# 在 Windows 的 Git Bash 中有效
# 在 Linux 上被视为单斜杠(可移植)
优点:
缺点:
始终使用小写 $(pwd)(而非 $PWD)并采用正确的语法:
# 正确:圆括号,小写 pwd,无引号
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# 正确:包含子目录
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/src:/app/src myimage
# 错误:大写 PWD 变量(可能无法正确转换)
docker run -v $PWD:/app myimage
# 错误:没有 MSYS_NO_PATHCONV(路径会被破坏)
docker run -v $(pwd):/app myimage
# 命名卷(无路径转换问题)
docker run -v my-named-volume:/data myimage
# 使用 MSYS_NO_PATHCONV 的绑定挂载(推荐)
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# 使用双斜杠的绑定挂载(替代方案)
docker run -v //c/Users/project:/app myimage
# 只读绑定挂载
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/config:/etc/config:ro myimage
# 多个卷
MSYS_NO_PATHCONV=1 docker run \
-v $(pwd)/src:/app/src \
-v $(pwd)/data:/app/data \
-v my-named-volume:/var/lib/data \
myimage
Docker Compose 文件使用正斜杠和相对路径 - 这些在 Git Bash 中能正确工作:
# 在 Git Bash 中无需修改即可工作
services:
app:
image: myimage
volumes:
# 相对路径(推荐)
- ./src:/app/src
- ./data:/app/data
# 命名卷(推荐)
- my-data:/var/lib/data
# 带正斜杠的 Windows 绝对路径(有效)
- C:/Users/project:/app
# Unix 风格路径(如果引用 WSL/MINGW 路径则有效)
- /c/Users/project:/app
volumes:
my-data:
重要提示: 运行 docker compose 命令时:
# 对于 compose 文件无需特殊处理
docker compose up -d
# 但如果使用命令行卷覆盖:
MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/extra:/extra app
# 每个会话设置一次环境
export MSYS_NO_PATHCONV=1
# 运行并启用实时代码重载
docker run -d \
--name dev-app \
-v $(pwd)/src:/app/src \
-v $(pwd)/public:/app/public \
-p 3000:3000 \
node:20-alpine \
npm run dev
# 查看日志
docker logs -f dev-app
# 使用命名卷存储数据库数据(无路径问题)
docker run -d \
--name postgres-db \
-e POSTGRES_PASSWORD=mypassword \
-v pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:16-alpine
# 使用 MSYS_NO_PATHCONV 挂载初始化脚本
MSYS_NO_PATHCONV=1 docker run -d \
--name postgres-db \
-e POSTGRES_PASSWORD=mypassword \
-v pgdata:/var/lib/postgresql/data \
-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql:ro \
-p 5432:5432 \
postgres:16-alpine
# 项目结构:
# /c/Users/project/
# ├── docker-compose.yml
# ├── backend/
# ├── frontend/
# └── data/
# docker-compose.yml(无需特殊路径处理)
cat > docker-compose.yml <<'EOF'
services:
backend:
build: ./backend
volumes:
- ./backend/src:/app/src
- ./data:/app/data
ports:
- "4000:4000"
frontend:
build: ./frontend
volumes:
- ./frontend/src:/app/src
- ./frontend/public:/app/public
ports:
- "3000:3000"
depends_on:
- backend
database:
image: postgres:16-alpine
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: changeme
volumes:
db-data:
EOF
# 启动所有服务(正常运作)
docker compose up -d
# 使用额外卷覆盖(需要 MSYS_NO_PATHCONV)
MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/scripts:/scripts backend bash
症状:
Error response from daemon: invalid mount config for type "bind":
bind source path does not exist: C:\Program Files\Git\c\Users\project
诊断:
C:\Program Files\Git\ 前缀解决方案:
# 在命令前添加 MSYS_NO_PATHCONV
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
症状:
诊断:
解决方案:
# 使用 MSYS_NO_PATHCONV 和 $(pwd)
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/data:/data myimage
# 或使用双斜杠
docker run -v //c/Users/project/data:/data myimage
# 或对持久数据使用命名卷
docker run -v my-named-volume:/data myimage
症状:
Error: invalid reference format
诊断:
解决方案:
# 使用 MSYS_NO_PATHCONV 并引用 $(pwd)
MSYS_NO_PATHCONV=1 docker run -v "$(pwd)":/app myimage
# 或完全避免项目路径中的空格(推荐)
# 将项目从:
# C:/Users/My Name/My Projects/app
# 移动到:
# C:/Users/MyName/projects/app
症状:
$PWD 变量而非 $(pwd)解决方案:
# 错误:使用 $PWD
docker run -v $PWD:/app myimage
# 正确:使用 $(pwd)
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# 解释:
# $(pwd) 是返回当前目录的命令
# $PWD 是可能未正确格式化的环境变量
创建测试脚本以验证 Docker 卷挂载是否正常工作:
#!/bin/bash
# test-docker-volume.sh
echo "在 Git Bash 中测试 Docker 卷挂载..."
# 创建测试文件
mkdir -p test-mount
echo "Hello from host" > test-mount/test.txt
# 测试 1:使用 MSYS_NO_PATHCONV
echo "测试 1:使用 MSYS_NO_PATHCONV"
MSYS_NO_PATHCONV=1 docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt
# 测试 2:使用双斜杠
echo "测试 2:使用双斜杠"
docker run --rm -v //$(pwd)/test-mount:/data alpine cat /data/test.txt
# 测试 3:不使用解决方法(应该失败)
echo "测试 3:不使用解决方法(可能失败)"
docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt
# 清理
rm -rf test-mount
echo "测试完成!"
运行它:
chmod +x test-docker-volume.sh
./test-docker-volume.sh
添加到您的 ~/.bashrc:
# Windows 上 Git Bash 的 Docker 路径转换修复
export MSYS_NO_PATHCONV=1
# 或者如果您喜欢按命令控制,可以使用包装函数
docker() {
(export MSYS_NO_PATHCONV=1; command docker.exe "$@")
}
export -f docker
# docker compose 的别名(如果需要)
alias docker-compose='MSYS_NO_PATHCONV=1 docker compose'
使用此脚本自动检测并为 Git Bash 配置 Docker:
# 添加到 ~/.bashrc
# 检测是否在 Windows 的 Git Bash/MINGW 中运行
if [ -n "$MSYSTEM" ] || [[ "$(uname -s)" == MINGW* ]]; then
# 在 Git Bash/MINGW 中运行
echo "检测到 Git Bash - 启用 Docker 路径转换修复"
export MSYS_NO_PATHCONV=1
# 可选:为显式控制创建包装函数
docker() {
(export MSYS_NO_PATHCONV=1; command docker.exe "$@")
}
export -f docker
fi
| 变量 | 用途 | 值 |
|---|---|---|
MSYS_NO_PATHCONV | 禁用所有路径转换(Git Bash) | 1 表示禁用 |
MSYS2_ARG_CONV_EXCL | 排除特定参数(MSYS2) | '*' 或模式 |
MSYS2_ENV_CONV_EXCL | 排除环境变量(MSYS2) | '*' 或模式 |
MSYSTEM | MSYS 子系统指示器 | MINGW64, MINGW32, MSYS |
# 推荐:每个会话导出一次
export MSYS_NO_PATHCONV=1
docker run -v $(pwd):/app myimage
# 按命令前缀
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# 双斜杠解决方法
docker run -v //c/Users/project:/app myimage
# 命名卷(无路径问题)
docker run -v my-data:/data myimage
# Docker Compose(相对路径有效)
docker compose up -d
这些 Docker 命令在 Git Bash 中无需特殊处理即可正常工作:
-v my-volume:/datadocker network createdocker build, docker pulldocker run myimage这些命令需要路径转换修复:
-v /c/Users/project:/app-v $(pwd):/appWindows 上 Git Bash 的最佳实践:
export MSYS_NO_PATHCONV=1./src:/app/srcmy-data:/var/lib/dataMSYS_NO_PATHCONV=1 docker run -v $(pwd):/app此配置确保 Docker 命令在 Windows 的 Git Bash 中正常工作,无路径转换问题。
每周安装次数
65
仓库
GitHub 星标数
21
首次出现
2026年1月24日
安全审计
已安装于
claude-code52
opencode51
gemini-cli50
codex48
cursor46
github-copilot44
This skill provides comprehensive guidance on handling Docker commands in Git Bash (MINGW) on Windows, with specific focus on volume mount path conversion issues and solutions.
When running Docker commands in Git Bash (MINGW) or MSYS2 on Windows, automatic path conversion can cause serious issues with volume mounts and other Docker commands.
MSYS/MINGW shells automatically convert arguments that look like Unix paths when calling Windows executables (like docker.exe):
Examples of problematic conversions:
# What you type:
docker run -v /c/Users/project:/app myimage
# What Docker receives (BROKEN):
docker run -v C:\Program Files\Git\c\Users\project:/app myimage
Triggers for path conversion:
/) in arguments/foo:/bar)- or ,What's exempt from conversion:
= (variable assignments)C:); (already Windows format)// (network paths/Windows switches)Use these environment variables to detect when path conversion issues may occur:
# Most reliable: Check for MSYSTEM
if [ -n "$MSYSTEM" ]; then
echo "Running in Git Bash/MINGW - path conversion needed"
fi
# Alternative: Check uname
if [[ "$(uname -s)" == MINGW* ]]; then
echo "Running in MINGW environment"
fi
# Environment variable to check:
# MSYSTEM values: MINGW64, MINGW32, MSYS
The most reliable solution for Git Bash on Windows.
Prefix each Docker command with MSYS_NO_PATHCONV=1:
# Volume mount with $(pwd)
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# Volume mount with absolute path
MSYS_NO_PATHCONV=1 docker run -v /c/Users/project:/app myimage
# Multiple volume mounts
MSYS_NO_PATHCONV=1 docker run \
-v $(pwd)/data:/data \
-v $(pwd)/config:/etc/config \
myimage
Disable path conversion for all Docker commands in your session:
# Add to ~/.bashrc or run in current shell
export MSYS_NO_PATHCONV=1
# Now all Docker commands work normally
docker run -v $(pwd):/app myimage
Create a function wrapper that automatically disables path conversion:
# Add to ~/.bashrc
docker() {
(export MSYS_NO_PATHCONV=1; command docker.exe "$@")
}
# Or using MSYS2_ARG_CONV_EXCL for MSYS2
docker() {
(export MSYS2_ARG_CONV_EXCL='*'; command docker.exe "$@")
}
# Make function available in subshells
export -f docker
For MSYS2 environments (not standard Git Bash):
# Disable all argument conversion
export MSYS2_ARG_CONV_EXCL='*'
# Selective exclusion (specific patterns)
export MSYS2_ARG_CONV_EXCL='--dir=;/test'
# Environment variable conversion exclusion
export MSYS2_ENV_CONV_EXCL='*'
Prefix paths with an extra / to prevent conversion:
# Single slash (converted - BROKEN)
docker run -v /c/Users/project:/app myimage
# Double slash (not converted - WORKS)
docker run -v //c/Users/project:/app myimage
# Works in Git Bash on Windows
# Treated as single slash on Linux (portable)
Advantages:
Disadvantages:
Always use lowercase $(pwd) (not $PWD) with proper syntax:
# CORRECT: Round brackets, lowercase pwd, no quotes
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# CORRECT: With subdirectories
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/src:/app/src myimage
# WRONG: Uppercase PWD variable (may not convert correctly)
docker run -v $PWD:/app myimage
# WRONG: Without MSYS_NO_PATHCONV (path gets mangled)
docker run -v $(pwd):/app myimage
# Named volumes (no path conversion issue)
docker run -v my-named-volume:/data myimage
# Bind mount with MSYS_NO_PATHCONV (RECOMMENDED)
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# Bind mount with double slash (ALTERNATIVE)
docker run -v //c/Users/project:/app myimage
# Read-only bind mount
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/config:/etc/config:ro myimage
# Multiple volumes
MSYS_NO_PATHCONV=1 docker run \
-v $(pwd)/src:/app/src \
-v $(pwd)/data:/app/data \
-v my-named-volume:/var/lib/data \
myimage
Docker Compose files use forward slashes and relative paths - these work correctly in Git Bash:
# WORKS WITHOUT MODIFICATION in Git Bash
services:
app:
image: myimage
volumes:
# Relative paths (RECOMMENDED)
- ./src:/app/src
- ./data:/app/data
# Named volumes (RECOMMENDED)
- my-data:/var/lib/data
# Windows absolute paths with forward slashes (WORKS)
- C:/Users/project:/app
# Unix-style paths (WORKS if referring to WSL/MINGW paths)
- /c/Users/project:/app
volumes:
my-data:
Important: When running docker compose commands:
# No special handling needed for compose files
docker compose up -d
# But if you use command-line volume overrides:
MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/extra:/extra app
# Set up environment once per session
export MSYS_NO_PATHCONV=1
# Run with live code reload
docker run -d \
--name dev-app \
-v $(pwd)/src:/app/src \
-v $(pwd)/public:/app/public \
-p 3000:3000 \
node:20-alpine \
npm run dev
# View logs
docker logs -f dev-app
# Use named volume for database data (no path issues)
docker run -d \
--name postgres-db \
-e POSTGRES_PASSWORD=mypassword \
-v pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:16-alpine
# Mount init scripts with MSYS_NO_PATHCONV
MSYS_NO_PATHCONV=1 docker run -d \
--name postgres-db \
-e POSTGRES_PASSWORD=mypassword \
-v pgdata:/var/lib/postgresql/data \
-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql:ro \
-p 5432:5432 \
postgres:16-alpine
# Project structure:
# /c/Users/project/
# ├── docker-compose.yml
# ├── backend/
# ├── frontend/
# └── data/
# docker-compose.yml (no special path handling needed)
cat > docker-compose.yml <<'EOF'
services:
backend:
build: ./backend
volumes:
- ./backend/src:/app/src
- ./data:/app/data
ports:
- "4000:4000"
frontend:
build: ./frontend
volumes:
- ./frontend/src:/app/src
- ./frontend/public:/app/public
ports:
- "3000:3000"
depends_on:
- backend
database:
image: postgres:16-alpine
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: changeme
volumes:
db-data:
EOF
# Start everything (works normally)
docker compose up -d
# Override with additional volume (needs MSYS_NO_PATHCONV)
MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/scripts:/scripts backend bash
Symptoms:
Error response from daemon: invalid mount config for type "bind":
bind source path does not exist: C:\Program Files\Git\c\Users\project
Diagnosis:
C:\Program Files\Git\ prefix addedSolution:
# Add MSYS_NO_PATHCONV before command
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
Symptoms:
Diagnosis:
Solution:
# Use MSYS_NO_PATHCONV with $(pwd)
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/data:/data myimage
# Or use double slash
docker run -v //c/Users/project/data:/data myimage
# Or use named volumes for persistent data
docker run -v my-named-volume:/data myimage
Symptoms:
Error: invalid reference format
Diagnosis:
Solution:
# Use MSYS_NO_PATHCONV and quote $(pwd)
MSYS_NO_PATHCONV=1 docker run -v "$(pwd)":/app myimage
# Or avoid spaces in project paths entirely (RECOMMENDED)
# Move project from:
# C:/Users/My Name/My Projects/app
# To:
# C:/Users/MyName/projects/app
Symptoms:
$PWD variable instead of $(pwd)Solution:
# WRONG: Using $PWD
docker run -v $PWD:/app myimage
# CORRECT: Using $(pwd)
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# Explanation:
# $(pwd) is a command that returns current directory
# $PWD is an environment variable that may not be properly formatted
Create a test script to verify Docker volume mounts work correctly:
#!/bin/bash
# test-docker-volume.sh
echo "Testing Docker volume mounts in Git Bash..."
# Create test file
mkdir -p test-mount
echo "Hello from host" > test-mount/test.txt
# Test 1: With MSYS_NO_PATHCONV
echo "Test 1: With MSYS_NO_PATHCONV"
MSYS_NO_PATHCONV=1 docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt
# Test 2: With double slash
echo "Test 2: With double slash"
docker run --rm -v //$(pwd)/test-mount:/data alpine cat /data/test.txt
# Test 3: Without workaround (should fail)
echo "Test 3: Without workaround (may fail)"
docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt
# Cleanup
rm -rf test-mount
echo "Testing complete!"
Run it:
chmod +x test-docker-volume.sh
./test-docker-volume.sh
Add to your ~/.bashrc:
# Docker path conversion fix for Git Bash on Windows
export MSYS_NO_PATHCONV=1
# Or use a wrapper function if you prefer per-command control
docker() {
(export MSYS_NO_PATHCONV=1; command docker.exe "$@")
}
export -f docker
# Alias for docker compose (if needed)
alias docker-compose='MSYS_NO_PATHCONV=1 docker compose'
Use this to automatically detect and configure Docker for Git Bash:
# Add to ~/.bashrc
# Detect if running in Git Bash/MINGW on Windows
if [ -n "$MSYSTEM" ] || [[ "$(uname -s)" == MINGW* ]]; then
# Running in Git Bash/MINGW
echo "Git Bash detected - enabling Docker path conversion fix"
export MSYS_NO_PATHCONV=1
# Optional: Create wrapper function for explicit control
docker() {
(export MSYS_NO_PATHCONV=1; command docker.exe "$@")
}
export -f docker
fi
| Variable | Purpose | Values |
|---|---|---|
MSYS_NO_PATHCONV | Disable all path conversion (Git Bash) | 1 to disable |
MSYS2_ARG_CONV_EXCL | Exclude specific arguments (MSYS2) | '*' or patterns |
MSYS2_ENV_CONV_EXCL | Exclude environment variables (MSYS2) | '*' or patterns |
MSYSTEM |
# RECOMMENDED: Export once per session
export MSYS_NO_PATHCONV=1
docker run -v $(pwd):/app myimage
# Per-command prefix
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
# Double slash workaround
docker run -v //c/Users/project:/app myimage
# Named volumes (no path issues)
docker run -v my-data:/data myimage
# Docker Compose (relative paths work)
docker compose up -d
These Docker commands work normally in Git Bash without special handling:
-v my-volume:/datadocker network createdocker build, docker pulldocker run myimageThese commands require path conversion fixes:
-v /c/Users/project:/app-v $(pwd):/appBest Practice for Git Bash on Windows:
export MSYS_NO_PATHCONV=1./src:/app/srcmy-data:/var/lib/dataMSYS_NO_PATHCONV=1 docker run -v $(pwd):/appThis configuration ensures Docker commands work correctly in Git Bash on Windows without path conversion issues.
Weekly Installs
65
Repository
GitHub Stars
21
First Seen
Jan 24, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
claude-code52
opencode51
gemini-cli50
codex48
cursor46
github-copilot44
Azure 升级评估与自动化工具 - 轻松迁移 Functions 计划、托管层级和 SKU
111,700 周安装
| MSYS subsystem indicator |
MINGW64, MINGW32, MSYS |