代码之家  ›  专栏  ›  技术社区  ›  Maximilian Gerhardt

WSL看不到环境变量

  •  1
  • Maximilian Gerhardt  · 技术社区  · 6 年前

    我目前正在寻求让一个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 要获取shell并执行脚本,输出如下:

    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> 要在wsl中执行bash命令,输出是不同的。环境变量只是不显示。

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

    好像是 BASHC (我也试过 .profile )通过wsl执行时未执行?`

    这是一个问题,因为当CYON调用WSL子系统使用CMASE构建我的C++项目时,编译器抱怨这个环境变量不存在。

    当我手动获取shell并执行 完全相同 cmake命令,编译工作时没有警告,因为存在环境变量。

    里昂内部:

    /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 回复  |  直到 6 年前
        1
  •  1
  •   Kurtis Rader    6 年前

    这个 BASHC 文件仅由交互式shell加载。当您以这种方式运行脚本时,它由非交互式shell处理。您可以使用 -i 切换(尽管我不知道这是否适用于 wsl 命令)。或者,放置 BASH_ENV=/home/max/.bashrc 在您的环境中运行脚本之前。