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()
是否也会识别命令?
答案 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会找到它。