2014-04-20 13 views
10

Đôi khi điều này hoạt động, đôi khi không. Dường như phụ thuộc vào việc hệ thống có cần nhắc nhập mật khẩu hay không. Câu hỏi tổng quát hơn sẽ là: có cách nào để người dùng cung cấp đầu vào cho một lệnh shell từ bên trong R?Chạy lệnh hệ thống là sudo từ R?

system('sudo npm install gitbook -g') 

Lưu ý rằng trường hợp cụ thể của tôi đang cố gắng cài đặt mô-đun node.js. Tuy nhiên, tôi nghĩ rằng bạn có thể tái tạo nó bằng cách sử dụng một lệnh tầm thường hơn.

system('sudo mkdir testdir') 

Xin lưu ý rằng điều này đôi khi sẽ hoạt động tùy thuộc vào việc sudo yêu cầu bạn nhập lại mật khẩu hay không. Cảm ơn.

+1

Đây không phải là giải pháp chung, nhưng bạn có thể dựa vào 'gksudo' (giao diện đồ họa cho sudo). – Jealie

+2

Tôi khuyên bạn nên xem 'man sudo', tùy chọn -A có thể phù hợp với bạn. –

+0

Bạn đang chạy R như thế nào? Trong terminal của tôi, tôi được nhắc nhập mật khẩu nếu tôi cần nó khi chạy sudo thông qua 'system' – Dason

Trả lời

8

Tôi có thể đề nghị hai giải pháp khác nhau:

  1. Sử dụng gksudo, mà sẽ nhắc nhở người dùng cho một mật khẩu trong một giao diện đồ họa. Sau đây là cách nó hoạt động trong thực tế:

    system('gksudo ls')

    • PRO:

      • Nó là an toàn, bạn không cần phải xử lý các mật khẩu cho mình.
      • ....
    • Nhược điểm:

      • nó sẽ không làm việc mà không có một giao diện đồ họa.
      • gksudo được cài đặt theo mặc định với các thương hiệu Linux mà tôi đã thử nhưng YMMV: có thể một số người dùng sẽ không có.
      • ....
  2. Yêu cầu mật khẩu người dùng trong R, và cung cấp nó với sudo tùy chọn thích hợp: -k luôn yêu cầu mật khẩu, và -S để chấp nhận các mật khẩu từ đầu vào tiêu chuẩn. Sau đây là cách nó hoạt động trong thực tế:

    system('sudo -kS ls',input=readline("Enter your password: "))

    • PRO:

      • Nó không dựa trên bất kỳ chương trình nào khác.
      • ....
    • Nhược điểm:

      • tôi không thích ý tưởng rằng một mật khẩu bị thao túng bởi R: có vẻ như một ý tưởng tồi.
      • ....

Khác hơn thế, tôi không biết về bất kỳ cách nào để tương tác giao tiếp với một chương trình bắt đầu từ R.

Các vấn đề liên quan