Как я могу заставить 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")

И это сработало отлично.