我正在使用称为 win-bash 的 bash 的 Windows 端口,根据它关于路径的说明:
一个重要的区别是驱动器的处理:cygwin 使用它的安装目录作为根目录,并链接伪子目录 /cygdrive 中的所有驱动器。win-bash 使用不同的方法:驱动器包含在路径中,就像在 Windows 上一样(例如 c:/Winnt/System32)。根目录 / 映射到当前驱动器的根目录。示例:ls c:/winnt - 显示目录 c:/winnt 的内容 cd c:/; ls /winnt - 将当前驱动器更改为 c: 并显示目录 c:/winnt 的内容 cd d:/; ls /winnt- 将当前驱动器更改为 d: 并显示目录 d:/winnt 的内容还有一些其他区别,添加它们大多数是为了简化现有 un*x shell 脚本的使用:如果 shell 脚本以解释器规范(如 #!/path/interpreter)开头,则会在 PATH 环境中而不是 /path 中搜索解释器。例如,以 #!/bin/perl 开头的 Perl 脚本将使用 PATH 环境变量中的 perl.exe 启动。win-bash 不使用任何 dll 或注册表项
检测非根路径似乎有效,例如:
if [ -d "C:/bash" ]; then echo "yes"; else echo "no"; fi
但是,检测这样的根路径if [ -d "C:/" ]; then echo "yes"; else echo "no"; fi
不起作用。这也包括C:
和/
。
也许有另一种语法 bash 脚本语法来检测路径的存在?
答案1
我发现在根驱动器路径后添加一个句点可以按照 ignis 的建议工作。
答案2
解决方法:做C:/.
并且C:/bash/..
有效?
答案3
win-bash 的替代方案是 winbash这里它在检测根路径方面做得更好。“C:/”和“/”在测试中都返回“是”。只有“C:”失败了。
另外,我喜欢 winbash 处理ctrl我们熟悉的 - 键组合,如ctrl- p、ctrl- a、ctrl-e等(在 win-bash 中,它只在屏幕上返回“^P”)。