Извините, если это - чрезвычайно глупый вопрос о новичке, но я не эксперт, и я не могу найти соответствующий ответ на этом или других форумах.
Я запускаю Ubuntu 18.04 x64, и я работаю с Intel Compilers. Для хранения моей системы и компиляции моего программного обеспечения последовательными, я установил свой .bashrc для устанавливания компиляторов Intel по умолчанию.
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. Каждый раз, когда я запускаю его, это сталкивается с компиляторами Intel и прерывает запуск с ошибкой:
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 или если существует любой другой способ иметь те переменные окружения и выполнение, но имеют программное обеспечение, игнорирующее их.
Спасибо!
Действительно возможно запуститься 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
После того как Вы сделаны, разработав в той оболочке, просто 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
Файл не должен быть исполняемым файлом, потому что Вы не выполните его, но получите его вместо этого. Это означает, что операторы там обрабатываются текущей оболочкой и следовательно влияют на текущую оболочку. Если бы Вы сделали бы это исполняемым файлом и затем выполнили бы его, подоболочка была бы порождена, настройки были установлены тут же, подоболочка закроется. Не, что Вы хотите.