A melhor maneira que encontrei é usar getent
porque isso funcionará com LDAP / NIS ou outros métodos de usuários não locais
getent passwd $UID| awk -F ":" '{print $5}'
no arquivo /etc/passwd
, temos o chamado GECOS fields
(que significa "General Electric Comprehensive Operating System"), ou seja:
username:password:userid:groupid:gecos:home-dir:shell
Em que GECOS
é dividido como:
:FullName,RoomAddress,WorkPhone,HomePhone,Others:
E Others
estão divididos em quantas vírgulas você quiser:
:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:
Nas páginas man chfn
, pode-se ler:
The other field is used to store accounting information used by other applications.
Agora, para um desenvolvedor de aplicativos (estou interessado em C language
, system calls
e / ou bash script
) qual é a melhor maneira de obter essas informações?
E considerando apenas o ambiente Bash
, dado que o comando finger
não pode exibir os campos others
(ou pelo menos eu não vejo como), quais são os outros comandos que podem? Eu sei que chfn
não apenas mostra, mas permite que eles sejam alterados. E se você quiser apenas enviar para stdout
?
Por exemplo, em um script bash você pode imprimir o quinto campo do arquivo /etc/passwd
com awk / gawk:
awk -F ":" '{print $5}' /etc/passwd
A opção -F fs
usa o fs para o separador de campo de entrada (nesse caso, :
).
Você pode ler mais, por exemplo, na página inicial do GNU awk [ 1 ] .
O awk tem a função split()
para dividir uma string (onde neste caso você usará o 5º campo como string e o ,
como separador). Tome a insipiração de alguma outra resposta sobre isso [ 2 ] ... .
Tags bash c linux shell-script finger