我想运行像
这样的东西stat --format '%m' $file
来自R.的所以我将其翻译为
system2("stat", args = c("--format", "'%m'", file)),
stdout = TRUE)
除非文件名包含&符,否则此方法正常。在这种情况下,它似乎被解释为重定向。如何逃脱&符号(&)?
答案 0 :(得分:0)
如果其中一个参数包含特殊字符,则需要引用它们,因此在这种情况下调用system2
的正确方法是
system2("stat", args = c("--format", "'%m'", shQuote(file)),
stdout = TRUE)
如果您快速阅读帮助,您可能会认为引用了所有参数,但请注意:
与'system'不同,'command'始终引用'shQuote',因此它必须是没有参数的单个命令。
也就是说,默认情况下,参数不是shQuote
。
当您无法信任您的输入时要小心,恶意用户可以为文件提供以下值:
file <- "foo&touch foo"
到
system2("stat", args = c("--format", "'%m'", file),
stdout = TRUE)
将在您的工作目录中创建文件foo
。它也可以做一些更邪恶的事情,不好。