Как я могу заставить R прочитать мои переменные среды?
Я запускаю R на экземплярах экземпляра EC2, и мне нужно R, чтобы завершить экземпляр и отменить запрос пятна после запуска script.
Для этого я установил "Request ID" в переменную окружения в /.bashrc
, и мой план состоял в том, чтобы просто вызвать следующий код в R после того, как script готов
system("ec2-cancel-spot-instance-requests $SIR")
Проблема, с которой я сталкиваюсь, заключается в том, что R не видит "одни и те же переменные среды", которые я видел при вводе env
извне R, поэтому команда не работает.
Я проверил, и если я установил свои переменные среды в /etc/environment
, то R сможет увидеть эти переменные, но вот другая проблема. Поскольку эти переменные являются динамическими (идентификатор экземпляра и идентификатор запроса различаются при каждом создании экземпляра места), я запускаю script для их создания в виде:
export SIR=`cat /etc/ec2_instance_spot_id.txt`
Если этот файл содержит динамический идентификатор
Итак, как я могу вставить "динамические" переменные окружения в /etc/environment
? Или, как я могу заставить R читать переменные среды в /.bashrc
?
Приветствуется любой совет в правильном направлении!
Ответы
Ответ 1
Вы хотите Sys.getenv()
, как в Sys.getenv("PATH")
, скажем.
Или для вашего примера попробуйте
SIR <- Sys.getenv("SIR")
system(paste("ec2-cancel-spot-instance-requests", SIR))
Что касается установки переменных при запуске, см. help(Startup)
, чтобы узнать о ~/.Renvironment
и т.д.
Ответ 2
Используя Sys.getenv()
, вы увидите все переменные, перечисленные в текущей среде.
Однако они отличаются от используемых в вашей текущей оболочке, например, указанных в .profile.
Чтобы установить переменные для R, создайте файл .Renviron
в вашем домашнем каталоге и напишите там
MYDIRECTORY="/home/wherever"
После перезапуска R вы сможете получить доступ к этой переменной с помощью
Sys.getenv("MYDIRECTORY")
Ответ 3
Я новичок в R, но мой подход был такой: переменные среды уровня проекта хранились в файле .env
. Чтобы сделать его доступным в R, я использовал
> readRenviron(".env")
Затем для доступа к определенной переменной
> Sys.getenv("RDS_UID")
И это сработало отлично.