简单的命令,如:system(command = "cat file1 > file2")
产生错误:/usr/bin/cat: >: No such file or directory
这意味着>
被解释为一个文件。为什么会发生这种事,我怎么才能绕过它呢?我正在Windows 10 Rstudio R4.0上运行这个程序。这些命令本身运行良好并不值钱,就像在system("cat file1")
中将预期的内容打印到stdout一样。
发布于 2020-07-31 13:21:09
跑步时
cat file1 > file2
您正依赖shell为您进行重定向。当您在linux机器上运行system()
时,它将为您创建一个shell,但是当您在Windows上使用system()
时,它不会运行完整的shell,它只是尝试执行命令。因此,您需要使用shell()
代替。
shell(command = "cat file1 > file2")
这将在?system
帮助页面的Note部分中进一步讨论。
发布于 2020-07-31 13:20:54
(这个答案主要是作为MrFlick先生关于使用shell
的建议的另一种通知。)
system2
比system
稍微差一些。稍微好一点的一种方法是,它允许使用stdout=
和stderr=
参数对参数进行重定向。你的命令是:
system2("cat", "file1", stdout = "file2")
不过,要小心,除了最简单的命令序列(或最偏执的命令序列)外,R的system
命令对所有命令序列都是非常危险的。作为比较,
system()
接受一个字符串,使调用者处理任何引用;system2()
允许您提供一个论点向量,在我看来,它将处理引用和类似的.但从它的来源来看:命令<- env(c(shQuote(命令),env,args),折叠=“")
,它只保护命令本身,留下其余的args盲目地保留space-collapsed.。
另一种选择是使用processx
包运行命令,因为它为您处理所有这些.还有其他一些安全措施和钟声。
https://stackoverflow.com/questions/63199075
复制相似问题