我安装了 MSYS,并且正在编写 bash 脚本来设置一些文件。我想从 MSYS 中的 bash 脚本创建一个目录符号链接,但要做到这一点,我需要使用
mklink /D
,这是一个 Windows 命令。 ln
不适用于 NTFS 符号链接,它似乎只是复制文件夹,所以不幸的是我无法使用它。
我使用 fstab 在 MSYS 中安装了一个目录为
/opt
。真正的目录是C:\opt
(但它可以是任何东西)
mklink
需要类似 C:\opt
的 Windows 风格路径。但是,我只能提供它无法使用的/opt
。有没有办法得到/opt
的“真实”路径?
或者,如果有一种方法可以让
ln
像 mklink /D
那样工作,那就太好了。但我似乎找不到办法(Cygwin 中确实存在一种方法,但它似乎对我不起作用)
注意:我没有cygwin,也不想安装外部软件(包括cygwin)
我以某种方式弄清楚了,尽管这是一个丑陋的黑客
如果我想找出当前目录的真实Windows路径,我可以使用
pwd -W
,这显然是MSYS独有的功能
在我的脚本中,我可能可以做类似的事情:
realpath=`cd /opt && pwd -W`
获取/opt的真实路径。我测试了一下,似乎有效。
不过,我希望有一个不那么难看的方法
我将此称为“winpath”并将其粘贴到 msys 的 /usr/bin 文件夹中。只有
pwd
似乎支持揭示底层的根路径:
#!/bin/bash
if [[ -f "$1" ]]; then
dir=$(dirname "$1")
add=/$(basename "$1")
else
dir="$1"
add=""
fi
pushd $dir > /dev/null
echo $(pwd -W)$add
popd > /dev/null
使用
cygpath
命令。它有许多输出格式和转换选项,但对于您的情况,只需 -w
或 --windows
就可以了。
$ cygpath -w '/c/Program Files (x86)/asl/bin/asl.exe'
C:\Program Files (x86)\asl\bin\asl.exe
我不确定这是否包含在所有 MSYS 安装中,但至少从版本 2.32.0.windows.2 开始,它就随 Git for Windows 一起提供了。