簡體   English   中英

R system()如何識別命令路徑?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM