将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与包含&符号的参数一起使用(&)的主要内容,如果未能解决你的问题,请参考以下文章

将 in_array 与货币符号一起使用?

env 参数在 system2 中不起作用?

将 Object.defineProperties 与符号一起使用是不是有效?

将 SOIL.lib 与 GCC 一起使用 - 添加符号时出错:无法识别文件格式

重识Nginx - 03 Nginx配置语法

将 Firebase 与 Google Toolbox for Mac 一起使用时出现未定义符号 Xcode 错误