【问题标题】:Pass shell environment variable to Rscript将 shell 环境变量传递给 Rscript
【发布时间】:2017-03-06 18:09:36
【问题描述】:

有没有办法将 shell 环境变量传递给 Rscript。例如:

Rscript -e 'devtools::install_github("private/repo",auth_token = "$GITHUB_CRED")'

我已经尝试过了,它只是传递了文字字符。我想知道是否还有其他方法?

【问题讨论】:

  • 可能是auth_token = shell("$GITHUB_CRED", intern = TRUE)?
  • 我要试一试。我现在有一个 hacky 解决方案,我将它推送到一个文件,然后 readLines()
  • args 怎么样? Rscript -e 'args <- commandArgs(trailingOnly = TRUE); paste("bla", args[1])' myPassword
  • @RichScriven 我尝试了shellsystem,都没有成功。
  • @zx8754 现在也将尝试您的解决方案。

标签: r


【解决方案1】:

狭义上的问题:“是的,Rscript可以”:

edd@max:~$ SOME_VAR="some value" Rscript -e 'print(Sys.getenv("SOME_VAR"))'
[1] "some value"
edd@max:~$ 

至于处理 GitHub 凭据,通过适当的 GitHub 客户端可能有更好的解决方案。你试过(优秀和推荐的)git2r 包吗?

【讨论】:

  • 不,我没试过git2r。我认为未说明的主要问题是我将它作为环境变量传递给由 CI 系统构建的 Dockerfile。所以更传统的方法都不起作用。
  • 我不是安全专家,但有些人曾在该领域工作过。不要重新发明轮子——围绕 Docker、git、凭据进行一些谷歌搜索......
  • 即使 Docker 也没有一个明确的共享秘密的策略。现在的一切都只是安全问题的黑客攻击。为了您的阅读乐趣github.com/docker/docker/issues/13490
【解决方案2】:

看起来有点可笑,但是:

echo $GITHUB_CRED > file.txt
Rscript -e 'devtools::install_github("private/repo",auth_token = readLines("file.txt"))'

我在 jenkins build(s) 中使用它和 docker-slaves-plugin,以便我可以将我的所有配置存储在与我的包存储库关联的 Dockerfiles 中(干净的构建)

【讨论】:

    【解决方案3】:

    您是否尝试过使用Sys.getenv

    Rscript -e 'devtools::install_github("private/repo", auth_token=Sys.getenv("GITHUB_CRED"))'
    

    【讨论】:

    • Sys.getenv 是否检索到正确的值?您可以打印出来查看。
    • 只要我exported 环境变量,它就对我有用。
    猜你喜欢
    • 2013-11-08
    • 2013-12-29
    • 2018-02-04
    • 2021-09-05
    • 2020-03-27
    • 2017-03-30
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多