如何在msys

时间:2017-09-18 08:32:31

标签: msys2

在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就是这种情况。

2 个答案:

答案 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