Windows下MinGW运行带空格路径.sh脚本报错的技术求助
解决Windows下双击带空格路径的.sh脚本通过MinGW运行出错的问题
原脚本遇到路径含空格时出现cd: too many arguments错误,核心原因是bash解析带空格的路径时未正确用引号包裹参数,导致路径被拆分成多个独立部分。以下是可行的修改方案:
方案一:通过变量传递路径
修改mingw64_open_with.cmd内容为:
@echo off set "script_path=%~1" C:\msys\usr\bin\env.exe MSYSTEM=MINGW64 c:\msys\usr\bin\bash.exe -l -c 'cd "$(dirname "$0")" && "$0"' "%script_path%"
关键说明:
set "script_path=%~1":移除%1自带的外层引号(如果存在),将路径安全存入变量,避免cmd层面的空格解析混乱。- bash命令用单引号包裹
-c的参数:防止cmd解析内部的双引号,让bash能直接识别路径的引号包裹逻辑。 "$(dirname "$0")":通过$0接收传递的脚本路径,双引号包裹确保dirname处理带空格的路径时不拆分参数,cd命令也能正确定位到脚本所在目录。
方案二:直接通过bash参数传递
也可简化为无需变量的写法:
@echo off C:\msys\usr\bin\env.exe MSYSTEM=MINGW64 c:\msys\usr\bin\bash.exe -l -c 'cd "$(dirname "$1")" && "$1"' -- "%~1"
关键说明:
--:作为bash的参数分隔符,确保后续的路径被当作普通参数传递,避免路径以-开头时被误判为命令选项。"%~1":移除原路径的外层引号,作为$1传递给bash的命令,后续"$(dirname "$1")"和"$1"都能正确处理带空格的路径。
两种方案都能解决路径含空格时的错误,任选其一替换原脚本即可。
内容的提问来源于stack exchange,提问作者Michel Rouzic
相关产品推荐
相关产品推荐

