[英]How does R system() recognize command path?
R的內置system()
函數如何知道在何處調用command
參數指定的任意OS命令? 例如,如果我homebrew install some_command_line_program
,那么在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()
也可以識別該命令?
哪種system
取決於您的操作系統,但您沒有告訴我們(盡管您已經提供了一些線索...)。
在與Unix相似的系統上,它將作為命令在bash shell中執行,該shell在$ PATH環境變量的目錄中搜索第一個匹配項。 您可以看到R中的內容:
> 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"
在Windows中,它還有其他作用。
您可以使用Sys.which
來獲取其可能運行的所有路徑的完整路徑,后者在Sys.which
上使用系統的which
命令,在Windows上對其進行偽造。 閱讀幫助以獲取更多信息。
如果您從源代碼編譯某些內容,則可以將運行命令的文件(shell腳本,可執行文件,任何語言的#!-script腳本)放置在$PATH
的文件夾中。 您可以自己創建一個文件夾,例如/home/user/bin
,將可執行文件放入其中,將其添加到$PATH
,然后(可能是在再次注銷in或重新啟動R或啟動一個新的shell之后。 ..),那么R會找到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.