Правдоподобное объяснение разницы в поведении состоит в том, что рабочие и нерабочие команды загружают разные библиотеки, потому что у них разные настройки для пути поиска библиотек LD_LIBRARY_PATH
. Существуют и другие переменные среды, которые могут иметь значение, но менее вероятны, например LD_PRELOAD
, PATH
(если ./ Logic
- это сценарий, который зависит от некоторых исполняемых файлов - но сообщение об ошибке не согласуется с этим) и т. д.
Правдоподобное объяснение того, почему вызов команды из интерактивного экземпляра bash не работает, но запуск команды непосредственно из sudo
работает, заключается в том, что вы устанавливаете эту среду в .bashrc
, файл, запускаемый интерактивными экземплярами bash. Запуск sudo
очищает почти все переменные среды, поэтому sudo ./Logic
работает; но sudo bash
, за которым следует ./ Логика
не работает, потому что запуск bash
снова устанавливает эти переменные.
Вы должны установить переменные среды в .profile
(который выполняется при запуске сеанса), а не в .bashrc
. Ваши симптомы характерны для одной из проблем с изменением переменных среды в .bashrc
.
Параметр LD_LIBRARY_PATH
, вероятно, вообще не должен присутствовать в ваших установочных файлах. Добавление каталога, скрывающего системные библиотеки, может быть источником несовместимости. Если он вам нужен для запуска определенной программы, установите LD_LIBRARY_PATH
только при запуске этой программы (через оболочку оболочки, если вы хотите автоматизировать ее), не устанавливайте ее глобально.