Usando a lista delimitada por nova linha como parâmetro

4

Houve várias situações em que tive alguma saída, como

thing1
thing2
thing3

Mas queria fazer algo como:

*command* thing1
*command* thing2
*command* thing3

Um exemplo disso seria: digamos que eu queira matar todas as sessões de tela. Existe alguma maneira que eu possa obter um comando para usar algo como:

screen -ls

que pode resultar em

88.mine (detached)
22.mine (detached)

Posso fazer algo que resultaria em todos os comandos possíveis, como este:

screen -S 88.mine test -X
screen -S 88.mine test -X

de uma só vez?

    
por user1833028 20.12.2013 / 03:38

2 respostas

8

Claro, use apenas read :

while read -r line; do
    command "$line"
done < file

No seu exemplo mais específico de screen , você precisa remover o texto restante:

while read -r session _; do
    screen -S "$session" test -X
done < file
    
por 20.12.2013 / 03:41
0

Existem algumas maneiras de ler uma lista separada por nova linha como entrada. O que você escolher dependerá do que exatamente você está tentando fazer, mas aqui estão alguns exemplos simples:

  • while/read

    $ printf "Tom\nDick\nHarry\n" | while read name; do echo "Hi $name"; done
    Hi Tom
    Hi Dick
    Hi Harry
    
  • for

    $ for name in $(printf "Tom\nDick\nHarry\n"); do echo "Hi $name"; done
    Hi Tom
    Hi Dick
    Hi Harry
    
por 20.12.2013 / 15:14