R system()如何识别命令路径?

时间:2016-02-01 06:32:46

标签: r

R的内置system()函数如何知道调用command参数指定的任意OS命令的位置?例如,如果我homebrew install some_command_line_program,当我输入时,R的system()函数如何知道它的位置:

cmd <- "some_complicated_code_from_some_command_line_program"  
system(cmd, wait=FALSE)

换句话说,如果没有任何用户输入,R如何足够聪明地知道在哪里看?如果我通过Github从源代码编译(而不是homebrew install),system()是否也会识别命令?

1 个答案:

答案 0 :(得分:1)

recoverWith取决于你的操作系统,你没有告诉我们(虽然你给了我们一些线索......)。

在类似unix的系统上,它作为bash shell中的命令执行,它在$ PATH环境变量的目录中搜索第一个匹配项。你可以看到R中的内容:

system

在Windows中,它会做其他事情。

您可以获得使用> Sys.getenv("PATH") [1] "/usr/local/heroku/bin:/usr/local/heroku/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/nobackup/rowlings/NEST4B" 运行的任何内容的完整路径,Sys.which使用系统&#39;关于unix的which命令并在Windows上伪造它。阅读帮助了解更多信息。

如果您从源代码编译某些内容,则会发现运行该命令的文件(shell脚本,可执行文件,任何语言的#! - 脚本)放在$PATH的文件夹中。您可以自己创建一个文件夹,比如/home/user/bin,将可执行文件放在那里,将其添加到$PATH,以及(可能在再次注销,或重新启动R,或者只是启动一个新文件)之后shell ...)然后R会找到它。