2016-10-07 2 views
3

Я пытаюсь запустить команду с использованием system2 и установить переменную среды с помощью аргумента env, но она не установлена. Я на Linux, поэтому это должно работать [в файле справки он упоминает, что env иногда не работает в Windows].env аргумент не работает в системе2?

Кто-нибудь знает, как установить переменные среды в system32?

E.g.

system2('echo', args='foobar') 
# foobar # as expected 
system2('echo', args='$X', env="X=foobar") 
# # <-- nothing is printed. as if I had just done `echo` 
# I expect to see 'foobar' echoed. 

# pretty sure the above environment specification is right, but just in case 
system2('echo', args='$X', env=c(X='foobar')) 
# sh: 1: foobar: not found 

# just to show it can work 
system('X=foobar; echo $X') 
# foobar 

Я просто использовать system в качестве обходного сейчас, но system HelpFile продолжает идти на о том, как я должен использовать system2. (? Если это ошибка, когда я подать его)

> sessionInfo() 
R version 3.2.5 (2016-04-14) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Ubuntu precise (12.04.5 LTS) 

locale: 
[1] LC_CTYPE=en_AU.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_AU.UTF-8  LC_COLLATE=en_AU.UTF-8  
[5] LC_MONETARY=en_AU.UTF-8 LC_MESSAGES=en_AU.UTF-8 
[7] LC_PAPER=en_AU.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 
+0

Как насчет 'системы2 (» echo ", args =" $ X ", env = c (" X = foobar; "))'? Команда, которая отправляется в оболочку, это просто 'paste (c (env, shQuote (команда), args), collapse =" ")'. –

+0

Да! Благодаря! Файл справки просто говорит «вектор символов строк« name = value », поэтому я предположил, что точка с запятой не нужна. Пожалуйста, напишите как ответ, я не мог найти никаких других вопросов, связанных с этим. –

+0

Немного нерешительный об этом ответе, хотя я не уверен, почему 'X = foobar echo $ X' не работает (из' system' или 'system2'). Также не уверен, что так используется аргумент 'env'. Возможно, кто-то еще в курсе может просвещать ... –

ответ

5

Поскольку команда, которая идет к раковине только paste(c(env, shQuote(command), args), collapse = " "), вы можете сделать:

system2("echo", args = "$X", env = c("X=foobar;")) 
Смежные вопросы