Подтвердить что ты не робот

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

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

system('sudo npm install gitbook -g')

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

system('sudo mkdir testdir')

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

4b9b3361

Ответ 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"))