установить переменные окружения для system () в R? - PullRequest
7 голосов
/ 08 октября 2010

Я использовал R в Ubuntu для системных вызовов, используя system() для таких вещей, как раскрутка экземпляров Amazon EC2, управление файлами на S3 и т. Д. Если я запускаю R из командной строки, все работает нормально. Но если я запускаю R из скрипта с использованием Rscript или из ESS, у меня возникают проблемы с неустановленными переменными среды.

Я думаю это проблема со мной, который не совсем правильно понимает, где устанавливать переменные окружения в Ubuntu. Я думал, что «правильное место» (для некоторого определения «право») должно было установить переменные среды пользователя в ~ / .bashrc. Здесь я устанавливаю такие вещи, как export EC2_HOME=/home/jd/ec2, но когда я выполняю R из ESS и выполняю системные вызовы, сценарий .bashrc не запускается. Я пробовал Googing о, и я вижу много толкований переменных окружения в Ubuntu, таких как this . Моя реакция коленного рефлекса состоит в том, чтобы попробовать каждую рекомендацию в вышеупомянутой теме и прекратить дерьмо, как только один из вариантов сработает. Но потом я получаю нестандартные настройки, которые потом кусают меня в задницу.

Итак, как мне установить переменные окружения, чтобы они правильно устанавливались, когда я запускаю вызов system() в R?

Ответы [ 3 ]

10 голосов
/ 08 октября 2010

Вы можете попытаться установить их в самом R, используя Sys.setenv.

7 голосов
/ 08 октября 2010

Я думаю, что вы путаете проблему. Я боюсь, что это может быть о оболочках входа в систему по сравнению с оболочками без входа в систему. См. Страницу руководства bash для мелкого шрифта ... который сводил меня с ума в прошлом.

Тем не менее, если вы можете установить переменные среды в масштабе всей системы, у вас есть несколько вариантов:

  • /etc/environment - очень хорошее место, так как оно не зависит от оболочки, если вы когда-либо используете другую оболочку
  • для входа в систему по сравнению с не входящими в систему оболочками, единственный способ получить полный контроль, который я нашел подходящим, заключался в том, чтобы поместить моих изменений в нечто вроде ~/.local_bashrc
  • добавление . ~/.local_bashrc от и все

    • ~./bashrc
    • ~/.bash_profile
    • ~ / .profile`

    и т. П.

Вы можете предшествовать источнику с echo Hello from FILE, где вы заменяете ФАЙЛ именем файла. Это показывает разницу между оболочками, начиная с входа в систему (например, через gdm и др.), Через соединение ssh, через новые терминалы xterm и т. Д. И т. Д.

0 голосов
/ 08 октября 2010

Вы можете заставить систему читать ваш файл .bashrc, используя исходную команду

source ~/.bashrc

Множество нелегких и безобразных способов применить это

...