2017-09-18 8 views
1

Dans un script shell bash, je dois définir PYTHONPATH. Nous avons le code suivant:Comment concaténer des chemins dans msys

if [ ${OS} == Windows_NT ]; then 
    PYTHONPATH="${TEST_DIR}input;${TEST_DIR}" 
else 
    PYTHONPATH="${TEST_DIR}input:${TEST_DIR}" 
fi 
export PYTHONPATH 

Cela fonctionne aussi sous msys2 aussi longtemps que test_dir est un chemin absolu. Cependant, dans mon code, TEST_DIR peut être à la fois un chemin absolu et un chemin relatif. Quand par exemple TEST_DIR =. msys2 n'effectue pas de magie: à; conversion, et par conséquent, PYTHONPATH n'est pas correctement défini.

détails sous-jacents

Lorsque msys2 exporte une variable d'environnement comme /c/first/path:/usr/local il transfroms que le programme non-msys externe à une variable d'environnement Windows tels que c:/first/path;c:/msys2/usr/local. Dans ce processus, il convertit les noms de fichiers de style Unix en noms de fichiers de style Windows et transforme le : en ; - ce qui est nécessaire car : est une partie commune d'un nom de fichier Windows. Cependant, cela ne semble pas se produire lorsque msys2 ne reconnaît pas la variable d'environnement comme un chemin, comme cela semble être le cas avec ./:./input.

+0

David, a ajouté la section Informations détaillées pour répondre à votre question. –

+1

Hé, merci de clarifier. Je suis incapable de reproduire votre problème dans mon installation de MSYS2. Voici une session shell de mon shell MINGW32 montrant ce que j'ai essayé: https://gist.github.com/DavidEGrayson/e87cb1631ab113ed1c9a86eb97a9ab2e –

Répondre

0

Comme suggéré par David Grayson, le code utilisé sous Linux fonctionne également sous MSYS2 et il n'est pas nécessaire d'utiliser un ; comme séparateur de chemin. Le code correct à utiliser sous Windows et Linux est donc:

PYTHONPATH="${TEST_DIR}input:${TEST_DIR}" 
export PYTHONPATH 
0

Un travail autour de ce jour est d'utiliser le code comme:

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 

Cependant, cela semble maladroit et je ne suis pas convaincu tous les chemins possibles sont traités correctement.