WSL не может видеть переменную среды - PullRequest
0 голосов
/ 25 сентября 2018

В настоящее время я нахожусь в поиске кросс-компилятора MIPS, работающего в WSL, доступ к которому осуществляется CLion.

Там у меня странная проблема с WSL.Я добавил следующее к .bashrc:

STAGING_DIR="/home/max/source/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16"
export STAGING_DIR

Более того, у меня есть скрипт test.sh

#!/bin/sh

echo "Staging dir is: " $STAGING_DIR

При использовании wsl для получения оболочки и выполнения скриптавыходные данные выглядят следующим образом:

max@DESKTOP-ISH7UJQ:/mnt/c/Users/Maxi$ ./test.sh
Staging dir is:  /home/max/source/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16

При использовании wsl <command> для выполнения команды bash в WSL выходные данные отличаются.Переменная окружения просто исчезла.

C:\Users\Maxi>wsl ./test.sh
Staging dir is:

Кажется, что .bashrc (я также пробовал .profile) не выполняется при выполнении его через wsl? `

Thisявляется проблемой, потому что, когда CLion вызывает подсистему WSL для построения моего C ++ проекта с использованием CMake, компилятор жалуется, что этой переменной среды там нет.

Когда я вручную получаю оболочку и выполняю точно такую ​​же команду cmake, , компиляция работает без предупреждений, поскольку переменная окружения находится там.

Внутри CLion:

/usr/bin/cmake --build /mnt/c/Users/Maxi/CLionProjects/linux_wsl_test/cmake-build-debug-wsl_omega --target all -- -j 2
Scanning dependencies of target linux_wsl_test
[ 50%] Building CXX object CMakeFiles/linux_wsl_test.dir/main.cpp.o
mipsel-openwrt-linux-g++: warning: environment variable 'STAGING_DIR' not defined
[100%] Linking CXX executable linux_wsl_test
mipsel-openwrt-linux-g++: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-g++: warning: environment variable 'STAGING_DIR' not defined
[100%] Built target linux_wsl_test

На оболочке WSL:

max@DESKTOP-ISH7UJQ:~/build_dir$ /usr/bin/cmake --build /mnt/c/Users/Maxi/CLionProjects/linux_wsl_test/cmake-build-debug-wsl_omega --target all -- -j 2
[ 50%] Building CXX object CMakeFiles/linux_wsl_test.dir/main.cpp.o
[100%] Linking CXX executable linux_wsl_test
[100%] Built target linux_wsl_test

Что здесь происходит?

1 Ответ

0 голосов
/ 26 сентября 2018

Файл ~ / .bashrc загружается только интерактивными оболочками.Когда вы запускаете скрипт таким образом, он обрабатывается неинтерактивной оболочкой.Вы можете заставить его быть интерактивным, используя переключатель -i (хотя я не знаю, работает ли он с командой wsl).В качестве альтернативы, поместите BASH_ENV=/home/max/.bashrc в вашей среде перед запуском сценария.

...