No bash, como eu passo o loop while ao input do comando cut?

2

Como eu passo a linha $ ao comando cut apropriadamente neste loop?

while read line
do
    login= $(cut -d : -f 1)

done < /etc/passwd

Eu não posso fazer $(cut -d : -f 1 $line) , então qual é a maneira correta?

    
por Mike 10.03.2013 / 23:41

3 respostas

1

Você não precisa realmente do loop while se sua intenção é apenas listar os nomes. Além disso, há um erro de sintaxe após login= , não deve haver espaço.

cut -d: -f1 /etc/passwd | \
while read login; 
do 
    echo username: $login;
done

ou conforme você tentou:

while read line; do
   login=$(echo $line | cut -d : -f 1)
   echo $login
done < /etc/passwd

ainda melhor:

db-getent passwd |cut -d: -f1 | xargs -L1 echo name:
    
por 11.03.2013 / 00:16
3

Deixe o comando read junto com a variável IFS do shell analisar a linha para você:

while IFS=: read -r login restOfLine; do
    doSomethingWith $login
done < /etc/passwd

Para responder à sua pergunta, o bash here-string seria útil:

login=$(cut -d: -f1 <<< "$line")
    
por 11.03.2013 / 02:17
2

Use echo :

login=$(echo "$line" | cut -d : -f 1)
    
por 10.03.2013 / 23:55

Tags