我最近做了一个(Windows)系统更新,现在我不能再使用R运行系统命令了。我试图重新安装R和所有使用的软件包,但是这不能解决我的问题。 重新启动也没有解决问题。
我刚刚发现system()和system2()命令不起作用,而shell()命令却起作用。
> system('ECHO "test"') Warning message: running command 'ECHO "test"' had status 127 > system2('ECHO "test"') Warning message: running command 'ECHO \"test\"' had status 127 > shell('ECHO "test"') "test"
该文档描述了shell()应该是一个简单的用户友好的包装系统()。 所以我不明白为什么shell()工作,但系统不。
系统()function还在工作的另一台计算机,我已经检查了差异。 Windows版本,R版本和软件包版本相同(至less根据干净会话中的sessionInfo())。 与我可以玩的system()相比,Shell()指定了一些额外的参数:
因此,我只能得出结论,shell()在system()之上做了一些改变其行为的东西。 这种行为没有在文档中指定,也不能通过任何参数访问。
我在哪里可以find两者之间的额外差异,以find这个错误的来源?
首先我试过如果我能重现这个(在Win10上):
system('ECHO "test"') #Warning message: #running command 'ECHO "test"' had status 127 shell('ECHO "test"') #"test"
然后我看了一下shell
的源代码,发现它在把它传递给system
之前改变了命令。 在我的系统上:
system('C:\\WINDOWS\\system32\\cmd.exe /c ECHO "test"') #"test"
如果Sys.getenv("R_SHELL")
为空,另请参阅Sys.getenv("COMSPEC")
,它给出了shell。 请注意,文档指出POSIX标准要求在shell下运行命令。 help("system")
解释说,在类似Unix的OS system
启动一个shell并推荐shell
(在Windows上)。