让程序忽略“.bashrc”

让程序忽略“.bashrc”

抱歉,这是一个非常愚蠢的新手问题,但我不是专家,而且我无法在这个论坛或其他论坛上找到任何适当的答案。

我正在运行 Ubuntu 18.04 x64,并使用英特尔编译器。为了保持我的系统和软件编译的一致性,我将 .bashrc 设置为默认的英特尔编译器。

source /opt/intel/parallel_studio_xe_2018.2.046/bin/psxevars.sh
export CC='/opt/intel/bin/icc'
export CXX='/opt/intel/bin/icpc'
export FC='/opt/intel/bin/ifort'
export F77='/opt/intel/bin/ifort'
export CFLAGS='-O3 -xHost -ip'
export CXXFLAGS='-O3 -xHost -ip'
export FCFLAGS='-O3 -xHost -ip'

现在,如果我这样做,我将无法启动 MATLAB R2017b。每次启动它时,它都会与英特尔编译器发生冲突并中止启动并显示错误:

symbol lookup error: /opt/intel/compilers_and_libraries_2018.2.199/linux/compiler/lib/intel64/libirng.so: undefined symbol: __intel_skx_avx512_memcpy

让 MATLAB 工作的唯一方法是在我的 .bashrc 文件中注释掉上述变量,获取它并启动 MATLAB。

这当然很疯狂,我想知道是否有可能真的有一个忽略 .bashrc 的 .desktop 文件,或者是否有其他方法可以启动并运行这些环境变量,但让软件忽略它们。

谢谢!

答案1

确实可以bash从忽略~/.bashrc文件开始。具体来说,通过--no-rc标志:

 bash --noprofile --norc

您可以.desktop以一种相当简单的方式为其创建一个包装文件:

[Desktop Entry]
Version=1.0
Name=No-rc shell
Comment=Starts Bash with --no-rc flag
Exec=bash --noprofile --norc
Icon=/usr/share/icons/gnome/48x48/apps/terminal.png
Terminal=true
Type=Application
Categories=Utility;Development;

或者,您可以修改~/.bashrc,以便可以动态获取它。例如,我个人会这样做:

if [ -z "$no_intell_compilers" ][ "$no_intell_compilers" = "false" ]; then
    source /opt/intel/parallel_studio_xe_2018.2.046/bin/psxevars.sh
    export CC='/opt/intel/bin/icc'
    export CXX='/opt/intel/bin/icpc'
    export FC='/opt/intel/bin/ifort'
    export F77='/opt/intel/bin/ifort'
    export CFLAGS='-O3 -xHost -ip'
    export CXXFLAGS='-O3 -xHost -ip'
    export FCFLAGS='-O3 -xHost -ip'
fi

它的作用是检查环境变量no_intell_compilers;如果未设置或设置为false~/.bashrc将导出这些变量。当你想在没有这些变量的情况下重新开始时,请执行

$ no_intell_compilers="true"
$ source ~/.bashrc

在该 shell 中完成开发后,只需unset no_intell_compilers再次获取文件即可恢复变量。

答案2

这并不能完全回答你关于忽略的问题.bashrc,但我认为这可能是一个合理的选择:

从中删除开发所需的语句~/.bashrc并将其放在单独的文件中,例如~/dev-env

#
# Set environment for icc compiler
#
source /opt/intel/parallel_studio_xe_2018.2.046/bin/psxevars.sh
export CC='/opt/intel/bin/icc'
export CXX='/opt/intel/bin/icpc'
export FC='/opt/intel/bin/ifort'
export F77='/opt/intel/bin/ifort'
export CFLAGS='-O3 -xHost -ip'
export CXXFLAGS='-O3 -xHost -ip'
export FCFLAGS='-O3 -xHost -ip'

然后,当您想要使用icc编译器开发某些东西时,只需在受影响的终端窗口中手动获取该文件即可:

source ~/dev-env

该文件不需要是可执行文件,因为你不会执行来源而是。这意味着其中的语句被处理由当前 shell从而影响当前 shell。如果您将其设为可执行,然后执行它,则会生成一个子 shell,在那里设置设置,然后子 shell 将关闭。这不是您想要的。

相关内容