2012-06-12 14 views
6

W moim .bashrc, mam linię:Jak uzyskać dostęp do zmiennej środowiskowej bash z poziomu R w emacs-ESS

export SETTINGS=/home/user/settings.xml 

Gdybym załadować R w bash, można uzyskać dostęp do tej zmiennej za pomocą funkcji Sys.getenv :

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

Gdybym otworzyć R w Emacs (MX R), ustawień jest pusty:

Sys.getenv("SETTINGS") 
"" 

Co próbowałem:

  1. dodanie następujących do .emacs na podstawie 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. otwarcia wybić otwór emacsie pomocą M-x term

    echo $SETTINGS   # works 
    R 
    Sys.getenv("SETTINGS") #works 
    
  3. Jeśli otworzyć emacsowi z terminala ustawienia zmienna jest dostępna zgodnie z oczekiwaniami. Otwieranie emacs z menu Aplikacje (z komendą /usr/bin/emacs23 %F lub emacs) nie działa.

  4. porównywaniu wyników z session("env") podczas ładowania R w bash vs emacs, ale nic nie stoi na inny niż (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 
    

mogę albo

  1. dostęp do ustawień z poziomu R w emacs-ess
  2. eksportuj ustawienia, gdzie mogę uzyskać do niego dostęp?
+0

Jak zaczynasz Emacs? Jeśli uruchomisz powłokę bash (z ustawieniami SETTINGS w środowisku) i uruchomisz Emacs z tego miejsca, powinno działać. Jak się wydaje, proces macierzysty nie ma tej zmiennej środowiskowej (zaczynając od powłoki Gnome lub podobnej?). –

+0

@MatthewLundberg Zaktualizowałem swoją odpowiedź (patrz punkt # 3). Otwarcie z terminalu działa. Otwieranie wywołań '/ usr/bin/emacs23% F' z menu Aplikacje, Gnome-do lub skrótu klawiaturowego nie działa. – Abe

Odpowiedz

3

Nie wiem o R i zdefiniowanych przez siebie zmiennych środowiskowych, ale ustawiam zmienną PATH w emacs na taką samą wartość jak w moim bashrc. Zmodyfikowałem swój kod na twój problem, daj mu szansę i daj mi znać, czy to działa.

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

kod oryginalny (dla ścieżki) jest:

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

Jeśli zacznie Ci sesję R wewnątrz emacs, sesja R będzie miał takie same zmienne środowiskowe jak emacs. Dlatego powinieneś najpierw upewnić się, że uruchamiasz emacs w taki sposób, że jego środowisko zawiera zmienną SETTINGS. W ten sposób twoja sesja R, która rozpocznie się w emacs, będzie miała ustawienia w swoim środowisku. Jak dokładnie to osiągnąć, zależy od twojego systemu.

+0

Moje systemy to Ubuntu i RedHat; czy masz jeszcze jakieś porady? Jak mogę zobaczyć środowisko w emacs? jeśli otworzę bash terminal używając 'M-x term' w emacs, zmienne są obecne. – Abe

3

.Bashrc może nie zostać odczytany po uruchomieniu Xsession. Spróbuj dodać

export SETTINGS=/home/user/settings.xml 

w .xsessionrc lub .gnomerc (jeśli używasz gnome). Te pliki są ładowane przy starcie dla sesji X.

+0

'~/.profile' i'/etc/profile' również działają – Abe

+0

Są prawdopodobnie lepsze niż xsesssionrc, ponieważ są czytane przy logowaniu przez ssh. –

0

Można umieścić

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

w .Rprofile jako obejście.

+0

To byłoby odpowiednie obejście problemu, oprócz tego, że chcę mieć dostęp do zmiennej w trybie "R --vanilla" – Abe

Powiązane problemy