2011-10-03 3 views
1

Надеюсь, я не прошу что-то, что нарушит великие умы пользователей переполнения стека; Я считаю, что я сделал домашнее задание, но пришел с пустыми руками.Запустить loginhook, но получить UID текущего зарегистрированного пользователя

В OS X, я пытаюсь создать loginhook, который будет проверять, существует ли файл в папке/usr/share, и если он не существует, он должен создать пустой файл с заголовком UID пользователя, который регистрируется.

Например, если мой UID равен 501, при входе в систему скрипт должен проверить, существует ли файл/501 в/usr/share. Если он не существует, он должен его создать.

Проблема, с которой я столкнулся, заключается в том, что все loginhooks выполняются как 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»; немного копаясь, и я узнал, у какой учетной записи есть UID 65 на моей машине.

Таким образом, решение заключается в следующем: userID=$(id -u $1) и причина, почему это работает, потому что начисление к Apple KB article, «В сценарии Войти крючки, переменные $ 1 возвращает короткое имя пользователя, регистрируясь.»

1

Попробуйте добавить man 1 logname.

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


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

Хм, я думал, что это сработало, но когда я запустил скрипт, он создал файл с названием 65, что означает, что учетная запись с UID 65 выполняла этот процесс. Выключается после выполнения «dscl -plist. Readall/users». Я смог найти, что учетная запись является mDNSResponder. Так странно. Я думаю, что ты меня на правильном пути, хотя, Вего. :) Я опубликую обновление, если найду ответ, который я ищу. – Semibeard

Смежные вопросы