获取MSYS中挂载目录的真实Windows目录(或使用ln与MSYS)

问题描述 投票:0回答:3

我安装了 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 bash msys ln mklink
3个回答
1
投票

我以某种方式弄清楚了,尽管这是一个丑陋的黑客

如果我想找出当前目录的真实Windows路径,我可以使用

pwd -W
,这显然是MSYS独有的功能

在我的脚本中,我可能可以做类似的事情:

realpath=`cd /opt && pwd -W`

获取/opt的真实路径。我测试了一下,似乎有效。

不过,我希望有一个不那么难看的方法


1
投票

我将此称为“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

0
投票

使用

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 一起提供了。

© www.soinside.com 2019 - 2024. All rights reserved.