Utilitário para consumir da lista e executar um comando (exclusivo) para cada elemento

0

Eu estava tentando fazer um utilitário para ler de stdin uma lista e, em seguida, dar um comando.

Eu fiz este script: (chamado consume_list )

#!/bin/bash

set -euo pipefail

eval "hack() {  $@ ; }"

while read -r line
do
    hack "$line"
done < <(cat /dev/stdin)

E assim posso envolver comandos e facilitar a leitura e a criação de scripts.

um mau exemplo é usar substituições de bash na lista (é, para mim, mais fácil que sed, cut, tr etc.), como em:

cat log.txt | grep 'error' | consume_list 'echo ${1:20:10}'

qual seria

Existe uma ferramenta adequada para conseguir isso?

    
por Pierre Antoine Guillaume 09.03.2018 / 11:24

1 resposta

3

A ferramenta “apropriada” para executar um comando em uma série de linhas a partir da entrada padrão (ou em qualquer outro lugar) é xargs :

grep error log.txt | xargs -r -d\n -n 1 bash -c 'echo ${0:20:10}'

No entanto, no seu exemplo, é muito melhor usar cut :

grep error log.txt | cut -c21-30
    
por 09.03.2018 / 11:40