2017-03-17 74 views
0

我登錄爲usera。我正嘗試從我的主目錄運行一個腳本,並使用sudo,併爲另一個用戶(即newuser)安裝pip的一些軟件包。如何在腳本中以超級用戶身份運行時爲用戶安裝pip軟件包? (virtualenv)

script.sh我有以下幾點:

sudo -u newuser pip3 install virtualenv

所以I型爲usera命令看起來像~/.usera: sudo script.sh

出於某種原因,這給了我以下錯誤:

PermissionError: [Errno 13] Permission denied: '/home/usera/.local' 
The directory '/home/usera/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. 

它不會安裝,至少不正確。有我能做到嗎?

回答

1

讓我們打印的USERHOME

(venv) ➜ sudo -u new bash -c 'echo $USER' 
new 
(venv) ➜ sudo -u new bash -c 'echo $HOME' 
/Users/old 

sudo -u newuser可以將當前用戶切換到newuser,但它不會改變你的HOME文件夾,這意味着你在你的HOME文件夾中運行pip3命令newuser這就是爲什麼你得到了Permission denied

所以,你可以試試這個:

sudo -H -u newuser bash -c 'pip3 install virtualenv' 

或者使用-i

-H,--set家庭

要求的安全策略設置HOME環境變量到 由目標用戶的密碼數據庫 條目指定的主目錄。根據策略,這可能是默認行爲。

-i,--login

運行在目標用戶的密碼數據庫條目 作爲登錄shell指定的shell。這意味着登錄特定資源文件 將作爲.profile或.login文件被shell讀取。如果指定了一個命令 ,它將通過shell的-c 選項傳遞給shell執行。如果沒有指定命令,則執行交互式shell。 sudo嘗試在運行 shell之前更改爲該用戶的主目錄。該命令的運行環境與用戶在登錄時收到的環境類似。 sudoers(5)手冊中的命令環境部分介紹了-i選項如何影響環境 ,其中命令在sudoers政策正在使用中。

sudo manpage查看更多詳情。

0

您需要重新創建您的virtualenv。不要以root(sudo)用戶身份創建虛擬環境。

按照以下步驟

  1. 創建文件夾(分配的所有權限的非根用戶)
  2. 文件夾內創建VIRTUALENV(無須藤)virtualenv venv -p python3

  3. 激活VIRTUALENV

  4. 你很好!
1

在腳本中,嘗試

sudo -i -u newuser pip3 install virtualenv 

-i是登錄shell這樣的主目錄將是NEWUSER現在。

+0

我不知道該把這個放在哪裏。這個想法將是從腳本得到這個工作,而不必運行額外的命令。 – Startec

+1

這是腳本中的sudo命令。只需在裏面添加'-i'。 – tayfun

相關問題