将system2与包含&符号的参数一起使用(&)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将system2与包含&符号的参数一起使用(&)相关的知识,希望对你有一定的参考价值。
我想运行类似的东西
stat --format '%m' $file
来自R.所以我把它翻译成了
system2("stat", args = c("--format", "'%m'", file)),
stdout = TRUE)
除非文件名包含&符,否则此方法正常。在这种情况下,它似乎被解释为重定向。我如何逃脱&符号(&)?
答案
如果其中一个参数包含特殊字符,则需要引用它们,因此在这种情况下调用system2
的正确方法是
system2("stat", args = c("--format", "'%m'", shQuote(file)),
stdout = TRUE)
如果您快速阅读帮助,您可能会认为所有参数都被引用但请注意它指出:
与'system'不同,'command'总是引用'shQuote',因此它必须是没有参数的单个命令。
也就是说,默认情况下参数不是shQuote
'd。
Security
当您无法信任您的输入时要小心,恶意用户可以为文件提供以下值:
file <- "foo&touch foo"
至
system2("stat", args = c("--format", "'%m'", file),
stdout = TRUE)
这将在您的工作目录中创建一个文件foo
。它也可以做一些更邪恶,更好的事情。
以上是关于将system2与包含&符号的参数一起使用(&)的主要内容,如果未能解决你的问题,请参考以下文章
将 Object.defineProperties 与符号一起使用是不是有效?