从 Bash 访问 R 的环境变量
Accessing R's Environmental Variables from Bash
我正在尝试从 bash 访问 R 的 environmental variables。安装指南最初让我相信 $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”
最后 sed:
/usr/lib64/R
我真的很想找到一种方法,让我无需经过这个过程就可以访问所有环境变量。
R_HOME/etc/Renviron 中列出了一些环境变量的定义。但是,bash 中有 none 个可用。
不,none 个变量将在 bash 中可用——除非您自己设置它们。
您可能会对 ?Startup
感兴趣,它解释了 R 如何设置环境变量背后的过程:
Unless --no-environ was given on the command line, R searches for site and user files to process for setting environment variables. The name of the site file is the one pointed to by the environment variable R_ENVIRON; if this is unset, ‘R_HOME/etc/Renviron.site’ is used (if it exists, which it does not in a ‘factory-fresh’ installation). The name of the user file can be specified by the R_ENVIRON_USER environment variable; if this is unset, the files searched for are ‘.Renviron’ in the current or in the user's home directory (in that order).
请注意,您可以 运行 两个脚本,它们将具有不同的 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_
变量:
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:~$
我正在尝试从 bash 访问 R 的 environmental variables。安装指南最初让我相信 $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”
最后 sed: /usr/lib64/R
我真的很想找到一种方法,让我无需经过这个过程就可以访问所有环境变量。
R_HOME/etc/Renviron 中列出了一些环境变量的定义。但是,bash 中有 none 个可用。
不,none 个变量将在 bash 中可用——除非您自己设置它们。
您可能会对 ?Startup
感兴趣,它解释了 R 如何设置环境变量背后的过程:
Unless --no-environ was given on the command line, R searches for site and user files to process for setting environment variables. The name of the site file is the one pointed to by the environment variable R_ENVIRON; if this is unset, ‘R_HOME/etc/Renviron.site’ is used (if it exists, which it does not in a ‘factory-fresh’ installation). The name of the user file can be specified by the R_ENVIRON_USER environment variable; if this is unset, the files searched for are ‘.Renviron’ in the current or in the user's home directory (in that order).
请注意,您可以 运行 两个脚本,它们将具有不同的 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_
变量:
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:~$