在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
就是这种情况。
答案 0 :(得分:0)
到目前为止,解决方法是使用如下代码:
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
然而,这看起来很笨拙,我不相信所有可能的路径都得到了正确处理。
答案 1 :(得分:0)
正如David Grayson所建议的,Linux下使用的代码也可以在MSYS2下运行,并且不需要使用;
作为路径分隔符。因此,在Windows和Linux下使用的正确代码是:
PYTHONPATH="${TEST_DIR}input:${TEST_DIR}"
export PYTHONPATH