Команда или сценарий оболочки для определения имени учетной записи MobileMe и копирования его в буфер обмена
Здравствуйте, я работаю над небольшим сервисом для OS X, мне было интересно, как я могу получить имя учетной записи MobileMe (если пользователь вошел в OSX) для дальнейшего использования в сценарии?
2 ответа
Будет ли следующий фрагмент делать то, что вы просите?
dscl localhost -readpl /Local/Default/Users/$(id -un) dsAttrTypeNative:LinkedIdentity mac.com | grep -A1 '>name<' | sed -n 's/.*string>\(.*\)<\/string>.*/\1/p'
Первый элемент считывает связанный с mac.com диктовочный идентификатор из служб каталогов для пользователя, который выполняет запрос, следующий элемент находит поле имени, а последний элемент принимает имя пользователя.mac и отображает его.
чтобы поместить его в буфер обмена, вы вводите эту команду со следующим окончанием:
dscl localhost -readpl /Local/Default/Users/$(id -un) dsAttrTypeNative:LinkedIdentity mac.com | grep -A1 '>name<' | sed -n 's/.*string>\(.*\)<\/string>.*/\1/p' | pbcopy
который копирует значение в буфер обмена (этот бит я пропустил в вопросе ранее)
Поскольку MobileMe хранит сертификаты и открытые / закрытые ключи в связке ключей, вы можете использовать
security find-identity -v
Чтобы создать список действительных удостоверений, откуда можно извлечь имя пользователя MobileMe из удостоверения с помощью (MobileMe Sharing Certificate)
в его названии.
Чтобы сделать это, я мог только придумать это рабочее, хотя и некрасивое решение, которое использует sed
печатать символы между двойными кавычками и awk
распечатать только имя пользователя:
security find-identity -v | grep MobileMe | sed -n 's/\(.*\)\"\(.*\)\"\(.*\)/\2/p' | awk '{print $1}'
(Если кто-то найдет более элегантное решение для этого, я был бы рад услышать!)