从R运行sudo系统命令?

jbr*_*yer 17 r

有时这有效,有时不行.这似乎取决于系统是否需要提示输入密码.更普遍的问题是:用户是否有办法从R内部向shell命令提供输入?

system('sudo npm install gitbook -g')
Run Code Online (Sandbox Code Playgroud)

请注意,我的具体情况是尝试安装node.js模块.但是,我认为您可以使用更简单的命令复制它.

system('sudo mkdir testdir')
Run Code Online (Sandbox Code Playgroud)

请注意,这有时会有效,具体取决于是否sudo要求您重新输入密码.谢谢.

Jea*_*lie 12

我可以建议两种不同的解决方案

  1. 使用gksudo,将在图形界面中提示用户输入密码.以下是它在实践中的工作原理:

    system('gksudo ls')

    • PRO:

      • 它是安全的,您不必自己处理密码.
      • ....
    • 缺点:

      • 没有图形界面它将无法工作.
      • gksudo 默认安装了我试过的linux品牌,但是YMMV:也许有些用户不会拥有它.
      • ....
  2. 询问用户密码R,并提供适当的sudo选项:-k始终要求输入密码,并-S接受标准输入的密码.以下是它在实践中的工作原理:

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

    • PRO:

      • 它不依赖于任何其他程序.
      • ....
    • 缺点:

      • 我不喜欢密码被操纵的想法R:它看起来像个坏主意.
      • ....

除此之外,我不知道以任何方式与开始的程序进行交互式通信R.


Gor*_*rka 5

只是为了建立@Jealie 的回应。我相信 1. 不适用于新版本的 ubuntu。

但是我们可以让 Rstudio 处理密码:

system("sudo -kS ls", input = rstudioapi::askForPassword("sudo password"))
Run Code Online (Sandbox Code Playgroud)