Trong cơ sở R, có 3 cơ chế chính để gọi lệnh hệ thống: system
, system2
và shell
(có vẻ như chia sẻ manpage với system
). Không ai trong số họ cung cấp một cách nền tảng rất đáng tin cậy để chạy một lệnh hệ thống mà không có một trình cản cản - và nếu một trình bao can thiệp, chúng ta cần phải lo lắng về các cuộc tấn công bằng shell, về việc đảm bảo trích dẫn là chính xác, v.v. .Gọi hệ thống mà không gọi vỏ trong R
Một số ngôn ngữ cung cấp quyền truy cập trực tiếp vào chức năng execvp
cấp C (ví dụ: cơ chế system PROGRAM LIST
của Perl), cực kỳ hữu ích khi tôi muốn đảm bảo rằng các chuỗi trong một mảng là chính xác các chuỗi mà quy trình con sẽ thấy trong các đối số của nó , mà không cần nhìn xung quanh để biết thói quen trích dẫn thích hợp cho khoảng trắng được nhúng, dấu ngoặc kép, v.v ... và lo lắng về những gì họ sẽ làm trên các nền tảng khác nhau và các phiên bản khác nhau của các trình bao.
Có cơ chế gọi hệ thống no-shell tương tự có sẵn trong R, có lẽ trong gói CRAN ở đâu đó không? Và/hoặc là có bất kỳ sự thèm ăn để tạo ra một cơ chế như vậy nếu không có một?
Câu hỏi rất thú vị và tôi muốn biết câu trả lời. Tuy nhiên, như nó đứng, câu hỏi có thể có thể được giải thích là một trong hai yêu cầu cho một công cụ (tắt chủ đề) hoặc chủ yếu dựa trên ý kiến. Tôi sẽ không bỏ phiếu để đóng, nhưng có lẽ bạn có thể áp dụng một chút chỉnh sửa để tránh những kết quả này? – Andrie
@Andrie không phải là câu hỏi đầu tiên trong đoạn cuối đủ? –
@PauloCardoso, như Andrie chỉ ra, câu hỏi đầu tiên trong đoạn cuối * là * "yêu cầu một công cụ". Tôi tưởng tượng nó sẽ dễ dàng để viết một gói với một đoạn nhỏ của mã mà chỉ cần thông qua một chuỗi để 'execvp' ... –