Pausa (com leitura ou similar) em xargs

1

Eu tenho um script parecido com o seguinte.

find /path -type f |
sed -re 'stuff' |
xargs -Ix sh -c '{
  echo "information about x"
  ./exe < x
  read
}'

Meu objetivo é fornecer cada arquivo dado a xargs como entrada para exe . No entanto, não quero que a saída de exe seja fornecida de uma só vez. Em vez disso, desejo estudar a saída de exe para cada arquivo e, em seguida, continuar assim que terminar de estudar essa saída. Por isso, tenho read .

O problema é que read não funciona parece aqui. Ao executar o script, toda a saída foi produzida. Há alguma sugestão sobre como alguém pode resolver este problema?

Note que eu não estou procurando uma maneira de adormecer a execução de xargs . Em vez disso, estou procurando uma maneira de pausar xargs , potencialmente indefinidamente, até que o usuário deseje continuar.

    
por nehcsivart 17.01.2016 / 04:12

1 resposta

3

Você pode redirecionar a entrada para read de /dev/tty da seguinte forma:

read reply < /dev/tty

Você pode realizar efetivamente os mesmos resultados dentro do shell, sem usar xargs e sem executar diretamente um novo shell para processar cada arquivo:

find /path -type f |
sed -re 'stuff' |
while IFS= read -r x
do
    echo "information about $x"
    ./exe < "$x"
    read reply < /dev/tty
done

Acho que você verá que esse método é mais eficiente (não é realmente um problema nessa situação interativa), mais portátil, requer menos sintaxe e é mais fácil de ler e manter.

    
por 17.01.2016 / 05:11