Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问R';来自Bash的环境变量_R_Bash - Fatal编程技术网

访问R';来自Bash的环境变量

访问R';来自Bash的环境变量,r,bash,R,Bash,我正试图从bash访问R。安装指南一开始让我相信$R_HOME是在bash中声明的。然而,这似乎并不准确 有没有办法从bash访问这些环境变量 前面的问题询问了如何使用Sys.getenv()或Sys.setenv()从R中访问这些变量。这个问题的重点是能够通过bash访问信息。仅调用echo$R_HOME不会在bash变量中生成适当的路径 例如,我能够使用复杂的方法获取信息: R_HOME=$(Rscript -e "Sys.getenv('R_HOME')" | grep -Po '".*?

我正试图从bash访问R。安装指南一开始让我相信$R_HOME是在bash中声明的。然而,这似乎并不准确

有没有办法从bash访问这些环境变量

前面的问题询问了如何使用Sys.getenv()或Sys.setenv()从R中访问这些变量。这个问题的重点是能够通过bash访问信息。仅调用
echo$R_HOME
不会在bash变量中生成适当的路径

例如,我能够使用复杂的方法获取信息:

R_HOME=$(Rscript -e "Sys.getenv('R_HOME')" | grep -Po '".*?"' | sed 's/"//g')
因此,我将收到: [1] “/usr/lib64/R”

Grep接着给出: “/usr/lib64/R”

最后,他说: /usr/lib64/R

我真的更愿意找到一种方法,让我不用经过这个过程就可以访问所有的环境变量


中列出了一些环境变量的定义。但是,它们在bash中都不可用。

不,这些变量在bash中都不可用——除非您自己设置它们

您可能会对
?Startup
感兴趣,它解释了R如何设置环境变量的过程:

除非命令行中没有给出环境,否则R将搜索要处理的站点和用户文件,以设置环境变量。站点文件的名称是环境变量R_ENVIRON指向的名称;如果未设置此项,则使用“R_HOME/etc/Renviron.site”(如果存在此项,则不会在“factory fresh”安装中使用)。用户文件的名称可以由R_ENVIRON_user环境变量指定;如果未设置,则搜索的文件是当前目录或用户主目录中的“.Renviron”(按该顺序)

请注意,您可以运行两个脚本,它们将具有不同的
Renviron
文件,从而具有不同的环境变量。我不知道你想做什么,但值得记住的是,给定的变量可能没有一个真值

也就是说,您可以读取默认的
Renviron
,然后自己设置所有变量:

$ R_HOME=`R RHOME`
$ source $R_HOME/etc/Renviron
$ echo $R_PAPERSIZE
a4

如果未在
bash
中设置它,但您需要使用它,为什么不这样做:

R_HOME=`Rscript --silent -e 'writeLines(Sys.getenv("R_HOME"))'`
echo $R_HOME
/Library/Frameworks/R.framework/Resources
(显然,我使用的是OS X)

您可以通过以下方式获得所有
R\u
变量:

Rscript -e 'for (x in grep("^R_", names(Sys.getenv()), value=TRUE)) writeLines(sprintf("%s=%s", x, Sys.getenv(x)))'

然后为您的
bash
脚本获取该脚本的输出。

这可能比前面两个答案所建议的要简单:

因为
RHOME
非常重要,所以请执行
R RHOME

edd@don:~$ R RHOME
/usr/lib/R
edd@don:~$ val=$(R RHOME)
edd@don:~$ echo ${val}
/usr/lib/R
edd@don:~$ 
基本上,所有其他配置都可以通过
R CMD config…

edd@don:~$ R CMD config --help | head -20
Usage: R CMD config [options] [VAR]

Get the value of a basic R configure variable VAR which must be among
those listed in the 'Variables' section below, or the header and
library flags necessary for linking against R.

Options:
  -h, --help            print short help message and exit
  -v, --version         print version info and exit
      --cppflags        print pre-processor flags required to compile
            a C/C++ file using R as a library
      --ldflags         print linker flags needed for linking a front-end
                        against the R library
      --no-user-files  ignore customization files under ~/.R
      --no-site-files  ignore site customization files under R_HOME/etc

Variables:
  BLAS_LIBS     flags needed for linking against external BLAS libraries
  CC            C compiler command
  CFLAGS        C compiler flags
edd@don:~$ 
最后,对于正在运行的R会话,您可以启动一个并访问它:

edd@don:~$ Rscript -e 'cat(Sys.getenv("PATH"))'     # manual break
/home/edd/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:\
/sbin:/bin:/usr/games:/usr/local/gamesedd@don:~$