env 参数在 system2 中不起作用?

Posted

技术标签:

【中文标题】env 参数在 system2 中不起作用?【英文标题】:env argument does not work in system2? 【发布时间】:2017-02-15 22:22:04 【问题描述】:

我正在尝试使用system2 运行命令并使用env 参数设置环境变量,但似乎没有设置。我在 Linux 上,所以这应该可以工作 [在帮助文件中提到 env 有时在 Windows 中不起作用]。

有谁知道如何在system32中设置环境变量?

例如

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 帮助文件一直在讨论我应该如何使用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  

【问题讨论】:

system2("echo", args="$X", env=c("X=foobar;")) 怎么样?进入 shell 的命令只是 paste(c(env, shQuote(command), args), collapse = " ") 是的!谢谢!帮助文件只是说“name=value 字符串的字符向量”,所以我认为分号不是必需的。请发布作为答案,我找不到与此相关的任何其他问题。 对这个答案有点犹豫,因为我不确定为什么X=foobar echo $X 不起作用(来自systemsystem2)。也不确定这是应该使用env 参数的方式。或许更了解的人可以开导... 我认为这是因为该语法在sh 中不起作用(我猜system 使用而不是bash 【参考方案1】:

由于进入 shell 的命令只是 paste(c(env, shQuote(command), args), collapse = " "),你可以这样做:

system2("echo", args = "$X", env = c("X=foobar;"))

【讨论】:

对于在此问题上碰壁的人请注意:我试图将我的环境变量作为 named 向量元素 (X = "foobar") 而不是有变量名in元素值("X=foobar")并且得到很多exec format error是因为我的第一个env变量被解释为我想要运行的可执行文件。

以上是关于env 参数在 system2 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

@font-face 在 Firefox 中不起作用 [重复]

AngularJS、SweetAlert.js 在自定义指令中不起作用

App Debug在Laravel 5.5中不起作用

全局变量在 React Native 中不起作用 - Expo

为啥导入 cugraph 在 kaggle 中不起作用?

JwtModule.registerAsync 在 NestJS 中不起作用