2010-08-19 33 views
77

如果我創建腳本/root/bin/whoami.sh conatining稱爲bash腳本:識別用戶通過須藤

#!/bin/bash 
whoami 

而且這個腳本是由用戶與正確配置sudo的調用,它將表明

root 

有一個快速的方法來獲得在腳本的實際用戶,否則我將不得不訴諸沿此用戶名傳遞參數?

TIA, 伯特

回答

44

我覺得$SUDO_USER是有效的。

#!/bin/bash 
echo $SUDO_USER 
whoami 
+1

奇怪的事情:'sudo env'顯示'SUDO_USER',但'sudo echo $ SUDO_USER'什麼都不打印... – Job 2010-08-19 13:54:20

+0

打電話給sudo時@Job?因爲它沒有任何意義,否則... – 2010-08-19 13:56:17

+15

工作,這並不奇怪,它的預期。在'sudo echo $ SUDO_USER'中,bash在**執行sudo之前正在評估$ SUDO_USER **。嘗試在此解決方案中發佈的腳本,它的工作原理。 – 2010-08-19 13:57:00

-3

嘗試:
ID -urn

+0

這會返回根用sudo運行時,這是OP正在嘗試解決的全部問題 – Nathan 2017-02-22 05:17:48

96

如果您正在使用sudo su - $ SUDO_USER不起作用。
它還需要多次檢查 - 如果$USER == 'root'然後得到$SUDO_USER

而不是命令whoami使用who am i。這將運行爲當前會話過濾的who命令。它給你比你需要更多的信息。那麼,這樣做是爲了得到公正的用戶:

who am i | awk '{print $1}' 

或者(和更簡單),你可以使用logname。它與上述說法完全相同。

這會爲您提供登錄到會話的用戶名。

這些工作不管sudosudo su [whatever]。無論調用多少次susudo,它也可以工作。

+2

是的,+1,'我是我'是這裏的答案。 – 2012-10-01 14:26:29

+28

替代'我是誰'是誰'媽媽喜歡'。你的選擇。 – wchargin 2014-08-31 20:36:28

+2

'誰'爲我返回兩行,都包含我的名字,'我是誰'沒有返回。任何幫助? – 2014-09-23 20:55:00

7

這裏是如何讓誰調用的腳本不管人的用戶名,如果須藤與否:

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi 

或較短的版本

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami` 
+5

甚至更​​短:'user = $ {SUDO_USER: - $(whoami)}'或['user = $(logname)'](http://stackoverflow.com/a/4597929/321973) – 2013-02-06 12:08:37

2

who am i | awk '{print $1}'並沒有對我的工作但 who|awk '{print $1}'將服務