Como obter uma linha inteira na variável de loop do comando for

0

Quando eu inicio um comando beta, recebo este resultado:

dda6e95c-ecd1-4c22-a8df-f118af6aff02 Mount to DZ70cd on /dev/vda
f01e331e-0394-423f-b8ea-150f6b88029e Mount to DZ74cd on /dev/vdc
9f0d31ec-caa2-4e88-9cbd-4c82ebda5be3 Mount to DZe64c on /dev/vdc
2f3da174-1f9e-40e7-8869-563d90b103f4 Mount to DZ0d76 on /dev/vdc

Eu gostaria de aplicar um processamento de dados em cada linha recebida com um loop bash para as:

 for i in 'beta-command' ; do echo $i  ; done ;

e eu tenho o respingo assim:

dda6e95c-ecd1-4c22-a8df-f118af6aff02
Mount
to
DZ70cd
on
/dev/vda
f01e331e-0394-423f-b8ea-150f6b88029e
Mount
to
DZ74cd
on
/dev/vdc

Como solicitar que o loop considere a linha e não o termo?

Obrigado

    
por dubis 22.08.2018 / 16:17

1 resposta

2

Você pode definir o Separador de campos internos ( IFS ) como nova linha:

IFS=$'\n'; for i in $(beta-command) ; do echo $i; done

Ou use um loop while :

while IFS= read -r i; do
  echo $i
done < <(beta-command)

ou use xargs :

beta-command | xargs -I{} echo {}

ou use awk se sua tarefa for manipular texto:

beta-command | awk '{print}'

Com relação aos prós (?) e contras do uso de loops para processar cada linha de saída de comando ou um arquivo, você pode leia isto (obrigado @Jeff Schaller) .

    
por 22.08.2018 / 16:27

Tags