Запустить системную команду как sudo из R?

Иногда это срабатывает, иногда нет. Кажется, что это зависит от того, должна ли система запрашивать пароль. Более общий вопрос: есть ли способ для пользователя вводить команду оболочки из R?

system('sudo npm install gitbook -g')

Обратите внимание, что мой конкретный случай пытается установить модуль node.js. Однако, я думаю, вы можете воспроизвести его, используя более тривиальную команду.

system('sudo mkdir testdir')

Обратите внимание, что это иногда срабатывает в зависимости от того, требуется ли sudo повторно ввести пароль. Спасибо.

Ответ 1

Я могу предложить два разных решения:

  • Используйте gksudo, который будет запрашивать у пользователя пароль в графическом интерфейсе. Вот как это работает на практике:

    system('gksudo ls')

    • PRO:

      • Это безопасно, вам не нужно самостоятельно обращаться с паролем.
      • ....
    • CONS:

      • он не будет работать без графического интерфейса.
      • gksudo был установлен по умолчанию с брендами linux, которые я пробовал, но YMMV: возможно, некоторые пользователи не будут иметь его.
      • ....
  • Запросите пароль пользователя в R и поставьте его с соответствующими параметрами sudo: -k, чтобы всегда запрашивать пароль, и -S, чтобы принять пароль со стандартного ввода. Вот как это работает на практике:

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

    • PRO:

      • Он не полагается на какую-либо другую программу.
      • ....
    • CONS:

      • Мне не нравится идея о том, что пароль управляется R: это выглядит как плохая идея.
      • ....

Кроме этого, я не знаю, каким образом взаимодействовать с программой, начинающейся с R.

Ответ 2

Просто чтобы направить на ответ @Jealie. Я считаю, что 1. Не будет работать в новых версиях ubuntu.

Но мы можем позволить Rstudio обрабатывать пароль:

system("sudo -kS ls", input = rstudioapi::askForPassword("sudo password"))