Заставьте программу проигнорировать “.bashrc”

Извините, если это - чрезвычайно глупый вопрос о новичке, но я не эксперт, и я не могу найти соответствующий ответ на этом или других форумах.

Я запускаю 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 или если существует любой другой способ иметь те переменные окружения и выполнение, но имеют программное обеспечение, игнорирующее их.

Спасибо!

2
задан 1 June 2018 в 13:34

2 ответа

Действительно возможно запуститься 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 и источник файл снова, чтобы иметь переменные назад.

4
ответ дан 2 December 2019 в 01:36

Это точно не отвечает на Ваш вопрос об игнорировании .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

Файл не должен быть исполняемым файлом, потому что Вы не выполните его, но получите его вместо этого. Это означает, что операторы там обрабатываются текущей оболочкой и следовательно влияют на текущую оболочку. Если бы Вы сделали бы это исполняемым файлом и затем выполнили бы его, подоболочка была бы порождена, настройки были установлены тут же, подоболочка закроется. Не, что Вы хотите.

3
ответ дан 2 December 2019 в 01:36

Другие вопросы по тегам:

Похожие вопросы: