Часть 1
Является getent
должен быть исполняемым файлом?
В моей настройке zsh я вижу, что getent фактически определяется как функция
$ which getent
getent () {
if [[ $2 = <-> ]]
then
grep ":$2:[^:]*$" /etc/$1
else
grep "^$2:" /etc/$1
fi
}
Если я хочу выполнить его из оболочки bash,
bash -c "getent passwd user"
Я получаю getent: command not found
ошибка.
Часть 2
В Mac OSX, getent
не выполняется независимо от того, действителен идентификатор пользователя или нет. Оказывается, идентификатор пользователя не хранится в /etc/passwd
файл. Почему так? А какая альтернатива?
В системах Linux, Solaris и (я считаю) * BSD getent является исполняемым файлом и будет обращаться к тому же набору баз данных, что и обычные функции поиска (файлы / etc, LDAP, NIS и т.д.).
Os-x не предоставляет getent, но вы можете получить аналогичную функциональность, используя dscacheutil
или dsutil
программы (которые общаются с серверной частью службы каталогов). Поиск в Интернете по запросу "osx getent" даст вам более подробную информацию.
getent И dsutil также не работают для меня на OSX bash.
Как Павел указывает выше, эта команда dscacheutil будет работать. Я смог проверить конкретного пользователя с помощью этой команды:
dscacheutil -q user -a name <username>.
Список пользователей с этой командой
dscacheutil -q user | grep 'name:'