使程序忽略“.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。

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

谢谢!

确实可以通过忽略~/.bashrc文件来启动bash 。 具体来说,通过--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并再次获取文件以恢复变量。

这并没有完全回答你关于忽略.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将关闭。 不是你想要的。