2012-06-12 16 views
6

En mi .bashrc, que tienen la línea:Cómo acceder a una variable de entorno fiesta desde dentro de R en emacs-ess

export SETTINGS=/home/user/settings.xml 

Si se me carga R en bash, puedo acceder a esta variable mediante la función Sys.getenv :

Sys.getenv("SETTINGS") 
"/home/user/settings.xml" 

Si abro R en Emacs (Mx R), la configuración está vacía:

Sys.getenv("SETTINGS") 
"" 

Lo que he intentado:

  1. añadiendo lo siguiente a .emacs, basado en How do I make Emacs recognize bash environment variables for compilation?

    ;; get environment vars from .bashrc 
    (let ((path (shell-command-to-string ". ~/.bashrc; echo -n $SETTINGS"))) 
        (setenv "SETTINGS" path)) 
    
  2. apertura golpe en emacs usando M-x term

    echo $SETTINGS   # works 
    R 
    Sys.getenv("SETTINGS") #works 
    
  3. Si abro emacs desde el terminal, los ajustes variable está disponible como se esperaba. La apertura de emacs desde el menú Aplicaciones (con el comando /usr/bin/emacs23 %F o emacs) no funciona.

  4. comparando la salida de session("env") al cargar R en bash vs emacs, pero nada se destaca que no sea (bash = <, emacs =>):

    > INSIDE_EMACS=23.3.1,comint 
    6d5 
    < SETTINGS=/home/user/settings.xml 
    9c8 
    < SHLVL=1 
    > SHLVL=0 
    14a14 
    > PAGER=cat 
    16d15 
    < PAGER=/usr/bin/pager 
    19d17 
    < COLORTERM=gnome-terminal 
    25c23 
    < WINDOWID=14680069 
    > DESKTOP_AUTOSTART_ID=1020ce948b944a88113395253627645060000001863000 
    < TERM=xterm 
    > TERM=dumb 
    

¿Puedo sea

  1. acceso AJUSTES desde dentro de R en emacs-ess
  2. ¿AJUSTES DE EXPORTACIÓN en algún lugar donde puedo acceder?
+0

¿Cómo está iniciando Emacs? Si comienzas un shell bash (con SETTINGS en el entorno) e inicias Emacs desde allí, debería funcionar. Tal como está, parece que el proceso principal no tiene esta variable de entorno (comenzando desde el shell Gnome o tal?). –

+0

@MatthewLundberg Actualicé mi respuesta (vea el punto # 3). Apertura de la terminal funciona. Abrir con una llamada a '/ usr/bin/emacs23% F' desde el menú Aplicaciones, Gnome-do o un atajo de teclado no lo hace. – Abe

Respuesta

3

No sé acerca de R y las variables de entorno autodefinidas, pero configuré la variable PATH en emacs con el mismo valor que en mi bashrc. Modifiqué mi código a tu problema, le di una oportunidad y me avisaste si funciona.

;; set env variable in Emacs 
(getenv "SETTINGS") 
(setenv "SETTINGS" "/home/user/settings.xml") 

Código original (por PATH) es:

;; Emacs has its own path variable 
(getenv "PATH") 
(setenv "PATH" 
(concat 
"/usr/local/texlive/2011/bin/x86_64-linux" ":" 
(getenv "PATH"))) 
0

Si se inicia una sesión de R dentro de Emacs, la sesión R tendrá las mismas variables de entorno como emacs. Por lo tanto, primero debe asegurarse de iniciar emacs de tal manera que su entorno contenga su variable SETTINGS. De esta manera, su sesión R, que inicia dentro de emacs, tendrá CONFIGURACIÓN también en su entorno. Cómo exactamente para lograr esto depende de su sistema.

+0

Mis sistemas son Ubuntu y RedHat; ¿tienes algún otro consejo? ¿Cómo puedo ver el entorno dentro de emacs? si abro un terminal bash usando 'M-x term' en emacs, las variables están presentes. – Abe

3

.bashrc podría no leerse cuando se inicia xsession. Trate de añadir

export SETTINGS=/home/user/settings.xml 

en el .xsessionrc o la .gnomerc (si está utilizando GNOME). Esos archivos se cargan al inicio de la sesión X.

+0

'~/.profile' y'/etc/profile' también funcionan – Abe

+0

Probablemente sean mejores que xsesssionrc porque se leen al iniciar sesión por ssh. –

0

Usted puede poner

SETTINGS <- "/home/user/settings.xml" 

en .Rprofile como una solución temporal.

+0

Eso sería una solución adecuada, excepto que quiero poder acceder a la variable en el modo "R --vanilla" – Abe

Cuestiones relacionadas