[英]Shell script and sudo
在我的shell腳本中,我有以下內容:
export PATH=$PATH:/home/$USER/somedir
假設我以Mike用戶身份登錄。 我需要以root用戶身份執行shell腳本,因此我以sudo filename.sh身份運行它,因此$ USER在這種情況下成為我的路徑中的root用戶。
我希望它是運行腳本的用戶的名稱,即mike而不是root。 有沒有辦法做到這一點?
謝謝
您必須使用/home/$USER
,還是$HOME
可以解決問題? IIRC, sudo
不會覆蓋$HOME
的值。
使用$SUDO_USER
(如果您堅持直接使用$USER
,請如下所示設置其值):
$ cat script.sh
#!/bin/bash
if [ "$SUDO_USER" != "" ]; then
USER=$SUDO_USER;
fi
export PATH=$PATH:/home/$USER/somedir
或使用$USER
作為腳本的第一個參數作弊(錯誤檢查是讀者的一項練習):
$ cat script.sh
#!/bin/bash
USER=$1
export PATH=$PATH:/home/$USER/somedir
然后:
$ sudo ./script.sh $USER
或使用Chris Jester-Young建議的$HOME
。 您可以使用bash刪除“ / home /”前綴,但這將是一個丑陋的破解。
如果您願意使用su
而不是sudo
,則可以
su -cp filename.sh
在保留環境的同時執行命令。
您可以嘗試使用$ UID,該$ UID仍應設置為用戶的真實ID號,並以此為基礎從密碼數據庫中檢索其名稱。
如果需要保護環境,可以使用sudo的-E選項。 但是它需要一些配置和安全策略...如果Chris JY提出的$ HOME解決方案因為更簡單而不適用,則適用。
我的2美分
sudo是不同形式的“ root”用戶。 如果任何用戶具有sudo特權,則意味着他具有用戶“ root”可用的管理員權限。 也就是說,使用sudo不會將用戶更改為root。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.