Bash: inserindo saída de 'id' no comando print

0

Estou tentando conseguir o seguinte: Liste meus usuários de Linux, que definiram bin / bash em / etc / passwd E anexe as informações de cada usuário de id [username] na instrução print, algo nas linhas de:

cat /etc/passwd | grep bin/bash | awk -F\: '{print $1";"$(id $1)}'

(o que obviamente não funciona;))

Tenho a sensação de que estou bem perto; o que estou perdendo?

A saída deve ser (veja o comentário de DavDav):

User1;uid=1000(User1) gid=1000(User1) groups=1000(User1) 
User2;uid=1001(User2) gid=1001(User2) groups=1001(User2) 
User3;uid=1002(User3) gid=1002(User3) groups=1002(User3) 
    
por DavDav 04.10.2018 / 14:56

3 respostas

2

Que tal

 </etc/passwd grep bin/bash | cut -d: -f1 | xargs -n1 id
    
por 04.10.2018 / 15:22
1

Tente isso,

 awk -F ':' '/bin\/bash/ {printf ($1";"); system("id "$1)}' /etc/passwd
  • system executará o comando e retornará o valor para awk
por 04.10.2018 / 15:12
0

Aqui está outra opção:

for i in $(grep /bin/bash /etc/passwd | awk -F: '{ print $1 }'); do
    echo "${i};$(id ${i})"
done

O grep ... awk ... gerará a lista de nomes de usuários correspondentes às linhas em /etc/passwd que contêm /bin/bash . Em cada iteração do loop for , i será um desses nomes de usuário. O echo , em seguida, imprime o nome de usuário seguido por um ponto e vírgula, seguido pela saída de id para esse nome de usuário.

    
por 04.10.2018 / 15:31