有时这种方法有效,有时则无效。这似乎取决于系统是否需要提示输入密码。更普遍的问题是:用户是否有办法从R?
中为shell命令提供输入system('sudo npm install gitbook -g')
请注意,我的具体情况是尝试安装node.js模块。但是,我认为您可以使用更简单的命令复制它。
system('sudo mkdir testdir')
请注意,这有时会有效,具体取决于sudo
是否要求您重新输入密码。感谢。
答案 0 :(得分:11)
我可以建议两种不同的解决方案:
使用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
开始的程序进行交互式沟通。
答案 1 :(得分:0)
仅以@Jealie的回应为基础。我相信1.不适用于新版本的ubuntu。
但是我们可以让Rstudio处理密码:
system("sudo -kS ls", input = rstudioapi::askForPassword("sudo password"))
答案 2 :(得分:0)
由于@jealie's answer中提到的gksudo
实用程序不再得到维护(因此从Ubuntu 18.04开始缺少),因此必须依靠pkexec
来代替here :
system("pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY ls")
使用R的新system2()
函数的同一命令:
system2(command = "pkexec",
args = "env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY ls",
stdout = TRUE,
stderr = TRUE)
要仅使用一个密码提示就依次运行多个命令,请将其与sudo
和bash -c '...'
组合:
system2(command = "pkexec",
args = paste0("env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY bash -c ",
"'sudo mkdir somedir; sudo ls -1l; sudo rm -R somedir'"),
stdout = TRUE,
stderr = TRUE)