В базе R есть 3 основных механизма для вызова системной команды: system
, system2
и shell
(который, как представляется, имеет manpage с system
). Ни один из них не обеспечивает очень надежный кросс-платформенный способ запускать системную команду без сбоя оболочки, и если оболочка вмешивается, нам нужно беспокоиться о атаках, связанных с атакой оболочки, о том, чтобы убедиться, что цитата правильная и так далее.
Некоторые языки обеспечивают прямой доступ к функции execvp
уровня C (например, Perl system PROGRAM LIST
), что очень полезно, когда я хочу убедиться что строки в массиве - это точно строки, которые подпроцесс увидит в своих аргументах, не оглядываясь на подходящую кавычку для встроенных пробелов, кавычек и т.д. и беспокоясь о том, что они будут делать на разных платформах и разных версиях оболочек.
Есть ли аналогичный механизм системного вызова без оболочки, доступный в R, возможно, где-то в пакете CRAN? И/или есть ли какой-либо аппетит для создания такого механизма, если он еще не существует?