系统()返回错误,但shell()的作品

我最近做了一个(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指定要使用的shell。 “细节”部分告诉我,这将检查两个环境variables:R_SHELL和COMSPEC。 在两个系统(全局和本地)上都没有定义R_SHELL。 COMSPEC在两个系统上定义并引用到cmd.exe(在同一文件夹中)。 我已经通过这个可执行文件检查并运行了纯粹的命令。
  • 不知道这是干什么的,但是这与system()命令有所不同。 据我所知,改变它的唯一原因是使用不同的shell / OS(例如Linux上的Bash)。
  • 对于shell()和system(), intern设置为FALSE。
  • 对于shell()和system(), 等待设置为TRUE。
  • 翻译设置为TRUE,但系统调用不包含“/”和“\”。 正如所料,玩这个布尔值不会改变结果。
  • 在发生错误时,必须与输出相关。 将返回一个错误或警告。 改变这个布尔值不会改变行为。

因此,我只能得出结论,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上)。