Я пытаюсь вызвать программу для работы запуска в/etc/rc.local, который выполняет две команды:
screen -dmS name
screen -S name -X stuff command
Однако команда полагается на экологический набор variablesbeing. Я установил эти команды ЭКСПОРТА и в корне .profile и в корне .pam_environment файл. Для ссылки они:
export PATH=$PATH:/usr/local/cuda-7.0/bin
export LD_LIBRARY_PATH=:/usr/local/cuda-7.0/lib64
Однако запущенный экран не видит эти переменные и ошибки с error while loading shared libraries: libcudart.so.7.0: cannot open shared object file: No such file or directory
- который является тем, что я ожидал бы, не были ли эти переменные установлены.
Проблема, я не могу выяснить, почему они не установлены. Мое лучшее предположение - то, что по некоторым причинам экран использует /bin/sh
(который является тем, о чем это сообщает если я echo $0
, тогда как оболочка корня по умолчанию /bin/bash
Более странная вещь состоит в том, что это только происходит для экрана, который инстанцируют как это при начальной загрузке. Если я использую ту же команду для запуска отдельного экрана, все это работает правильно (и использует/bin/bash) без проблем с переменными окружения.
Какая-либо идея, что вызывает это и как зафиксировать? Я использую Ubuntu 14.04 LTS
.
Возможно, Ваш $SHELL
не установлен или установлен на /bin/sh
? Или у Вас есть a shell
набор к /bin/sh
в Вашем .screenrc
файл?
Посмотрите screen
документация:
-s program
устанавливает оболочку по умолчанию на указанную программу, вместо значения в переменной среды
$SHELL
(или/bin/sh
если не определенный). Это может также быть определено черезshell
.screenrc
команда. См. также там.
И там:
shell command
Установите команду, которая будет использоваться для создания новой оболочки. Это переопределяет значение переменной среды
$SHELL
. Это полезно, если требуется выполнить tty-усилитель, который ожидает выполнять программу, указанную в$SHELL
. Если команда начинается с a-
символ, оболочка будет запущена как оболочка входа в систему. Типичные оболочки делают только минимальную инициализацию при отсутствии запуска как оболочка входа в систему. Например, Bash не считает Ваш~/.bashrc
если это не оболочка входа в систему.