Запуск screen
в bash стирает переменную LD_LIBRARY_PATH. Я немного почитал, и похоже, что это ожидаемое поведение, но мне нужно обойти это.
Обходной путь - добавление объявления LD_LIBRARY_PATH ~/.bashrc
. В моем случае LD_LIBRARY_PATH сильно меняется между запуском оболочки и при запуске экрана, поэтому мне нужно получить текущее значение LD_LIBRARY_PATH в screen
сеансе.
bash
environment-variables
gnu-screen
Эндрю Вуд
источник
источник
Ответы:
screen
не сбрасывает переменную окружения; он удален самой Linux.В большинстве систем
/usr/bin/screen
исполняемый файл устанавливается с битом setgid дляutmp
группы, чтобы иметь возможность изменятьutmp
базу данных. Он также использует setgid для управления доступом к каталогу сокетов (/var/run/screen/
).В Linux, когда запускается программа setuid (или setgid ), она не получает определенные переменные среды (включая
LD_LIBRARY_PATH
несколько другихLD_*
переменных иHOSTALIASES
), чтобы уменьшить возможные точки атаки: в противном случае вы можете написать небольшую библиотеку и трюкsu
илиsudo
таким образом вызывая ваши «улучшенные» функции.Вы можете удалить бит setgid
screen
, но вам придется сделать каталог сокетов полностью доступным для всех (режим 0777). Это не должно быть угрозой безопасности, так какscreen
также проверяет сам UID атакующего.Однако вы не должны делать
utmp
базу данных доступной для записи.источник
chgrp root $(which screen)
иchmod 777 /var/run/screen
. Вы можете протестировать этот небольшой скрипт bash:while true; do echo $LD_LIBRARY_PATH; sleep 2; done
вы увидите, что путь успешно отображается. Спасибо, благодарность.В вашем
.screenrc
, вы можете использоватьsetenv
команду, чтобы установить значение в среде экрана.Это устанавливается до запуска вашей оболочки. Очевидно, что
LD_LIBRARY_PATH_SCREEN
необходимо установить перед запуском экрана.источник
_SCREEN
них может быть установлен в вашем файле rc или в скрипте-оболочке, который запускает экран.Попробуйте
export
использовать переменную окружения, которая вас интересует.источник