2014-04-20 222 views
10

有時候這有效,有時候不行。這似乎取決於系統是否需要提示輸入密碼。更一般的問題是:有沒有一種方法可以讓用戶從R中爲shell命令提供輸入?從R運行sudo的系統命令?

system('sudo npm install gitbook -g') 

請注意,我的特定情況下,試圖安裝一個Node.js的模塊。不過,我認爲你可以使用更簡單的命令複製它。

system('sudo mkdir testdir') 

請注意,這有時會因sudo是否需要您重新輸入密碼工作。謝謝。

+1

這不是一個通用的解決方案,但你可以依靠'gksudo'(一個用於sudo的圖形界面)。 – Jealie

+2

我建議看看'man sudo',-A選項可能適合你。 –

+0

你如何運行R?在我的終端中,如果通過'system'運行sudo時需要密碼,我會提示輸入密碼。 – Dason

回答

8

我可以建議兩種不同的解決方案:

  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開始進行交互式通信。