2011-10-03 55 views
1

我希望我不會問一些會破壞堆棧溢出用戶偉大思想的東西;我相信我已經完成了我的功課,但卻空手而歸。運行loginhook,但得到當前登錄用戶的UID

在OS X中,我試圖創建一個loginhook來檢查文件是否存在於/ usr/share文件夾中,如果它不存在,它應該創建一個空文件,標題爲登錄的用戶的UID。

例如,如果我的UID是501,登錄時腳本應檢查/ usr/share中是否存在名爲「501」的文件。如果它不存在,它應該創建它。

我遇到的問題是所有的loginhook都以root身份運行,所以如果創建了一個文件,它的文件名就是「0」。

我想出了迄今爲止唯一的一點是:

#!/bin/bash 
userID=$(id -u) 
if [ ! /usr/share/$userID ] 
touch /usr/share/$userID 
fi 

回答

1

在vego的幫助和指導下,我找到了答案。 Vego大部分是正確的,因爲 sudo userID=$(id -u $(logname)) 將產生501(因爲我的UID是501)而不產生0,這是根的UID。

登錄掛鉤的事情,不過看起來,運行腳本的帳戶是mDNSResponder。我得出這個結論是因爲在運行我的腳本之後,我得到了一個標題爲「65」的文件;稍微挖了一下,我發現哪個帳戶在我的機器上具有65的UID。

所以,解決的辦法是這樣的:「在登錄鉤子腳本中,變量$ 1的回報是誰在登錄的用戶的短名稱爲」 userID=$(id -u $1) 以及爲什麼這個工程的原因是因爲累積到Apple KB article

1

嘗試增加man 1 logname

userID=$(id -u $(logname)) 


# compare 
sudo id -u 
sudo id -u $(logname) 
+0

嗯,我認爲它有效,但是當我運行腳本時,它創建了一個標題爲65的文件,這意味着具有65的UID的帳戶運行該進程。在執行「dscl -plist。readall/users」之後,我發現帳號是mDNSResponder ..所以這很奇怪。不過,我認爲你已經讓我走上了正確的道路,Vego。 :)我會發布更新,如果我找到我正在尋找的答案。 – Semibeard

相關問題