如何在 msys 中连接路径
How to concatenate paths in msys
在 bash shell 脚本中,我必须设置 PYTHONPATH。我们有以下代码:
if [ ${OS} == Windows_NT ]; then
PYTHONPATH="${TEST_DIR}input;${TEST_DIR}"
else
PYTHONPATH="${TEST_DIR}input:${TEST_DIR}"
fi
export PYTHONPATH
只要 TEST_DIR 是绝对路径,这在 msys2 下也有效。但是,在我的代码中 TEST_DIR 可以是绝对路径也可以是相对路径。例如TEST_DIR=时。 msys2 不执行魔术 : to ;转换,因此未正确设置 PYTHONPATH。
基本细节
当 msys2 导出环境变量时
/c/first/path:/usr/local
它将外部非 msys 程序转换为 Windows 环境变量,例如 c:/first/path;c:/msys2/usr/local
。在那个过程中,它将 unix 风格的文件名转换为 Windows 风格的文件名,并将 :
转换为 ;
—— 这是需要的,因为 :
是一个常见的Windows 文件名的一部分。但是,当 msys2 无法将环境变量识别为路径时,这似乎不会发生,./:./input
.
就是这种情况。
目前的解决方法是使用如下代码:
case ${TEST_DIR} in
/*)
sep=":"
;;
*)
if [ ${OS} == Windows_NT ]; then
sep=";" # on windows when TEST_DIR is an relative path we shall concatenate paths in an environment variable with a ;
else
sep=":"
fi
esac
PYTHONPATH="${TEST_DIR}input${sep}${TEST_DIR}"
export PYTHONPATH
但是,这看起来很笨拙,我不相信所有可能的路径都得到了正确处理。
正如 David Grayson 所建议的,在 Linux 下使用的代码也可以在 MSYS2 下工作,并且不需要使用 ;
作为路径分隔符。所以在 Windows 和 linux 下使用的正确代码是:
PYTHONPATH="${TEST_DIR}input:${TEST_DIR}"
export PYTHONPATH
在 bash shell 脚本中,我必须设置 PYTHONPATH。我们有以下代码:
if [ ${OS} == Windows_NT ]; then
PYTHONPATH="${TEST_DIR}input;${TEST_DIR}"
else
PYTHONPATH="${TEST_DIR}input:${TEST_DIR}"
fi
export PYTHONPATH
只要 TEST_DIR 是绝对路径,这在 msys2 下也有效。但是,在我的代码中 TEST_DIR 可以是绝对路径也可以是相对路径。例如TEST_DIR=时。 msys2 不执行魔术 : to ;转换,因此未正确设置 PYTHONPATH。
基本细节
当 msys2 导出环境变量时
/c/first/path:/usr/local
它将外部非 msys 程序转换为 Windows 环境变量,例如 c:/first/path;c:/msys2/usr/local
。在那个过程中,它将 unix 风格的文件名转换为 Windows 风格的文件名,并将 :
转换为 ;
—— 这是需要的,因为 :
是一个常见的Windows 文件名的一部分。但是,当 msys2 无法将环境变量识别为路径时,这似乎不会发生,./:./input
.
目前的解决方法是使用如下代码:
case ${TEST_DIR} in
/*)
sep=":"
;;
*)
if [ ${OS} == Windows_NT ]; then
sep=";" # on windows when TEST_DIR is an relative path we shall concatenate paths in an environment variable with a ;
else
sep=":"
fi
esac
PYTHONPATH="${TEST_DIR}input${sep}${TEST_DIR}"
export PYTHONPATH
但是,这看起来很笨拙,我不相信所有可能的路径都得到了正确处理。
正如 David Grayson 所建议的,在 Linux 下使用的代码也可以在 MSYS2 下工作,并且不需要使用 ;
作为路径分隔符。所以在 Windows 和 linux 下使用的正确代码是:
PYTHONPATH="${TEST_DIR}input:${TEST_DIR}"
export PYTHONPATH