Bem, você certamente poderia apenas fazer um loop e usar variáveis:
while true; do
a=$(echo "$a" | grep "Hey" | cut -d" " -f2 | tee -a log)
done
Isso salvaria a última saída que seria usada no começo novamente
Até agora, eu conheço o mecanismo de tubulação como uma forma de conectar uma série de comandos conectando o stdout de um comando ao stdin do próximo comando até que o último comando seja alcançado, o qual conecta seu stdout com o display ou um arquivo.
Seria possível, entretanto, fazer um loop de comandos, então o stdout do último comando se conecta ao stdin do primeiro comando e talvez usando tee de alguma maneira os valores de mudança de uma certa saída poderiam ser exibidos?
Não tenho certeza sobre todos os shells que existem, mas no Bash é possível, embora não com pipes não nomeados. Portanto, não com o símbolo |
. Mas se você criar um pipe nomeado:
mkfifo fifo
Então você pode usá-lo:
<fifo cat | cat >fifo &
Agora o pipeline funciona em segundo plano, mas não faz nada. Mas se você alimentar o tubo de fora do oleoduto:
echo x >fifo
O pipeline será desbloqueado e continuará para sempre. Ou até você drenar o tubo:
cat fifo
A saída aparecerá uma vez:
x
Para tornar isso um pouco sofisticado, o canal pode ser esse:
<fifo cat | xargs -I@ echo @x >fifo &
Por isso, irá adicionar um x
à saída em cada iteração. Claro que sim, mas apenas uma vez iniciadas as iterações, ou seja, logo que o cano desbloqueia, é assim que há algo para ler. Como anteriormente, isso pode ser iniciado manualmente:
echo x >fifo
Agora, veja o que top
mostra. Deve haver muita atividade de cat
e xargs
.
E o mesmo de antes, se você drenar o pipeline, você verá muito x
s no terminal, e o pipeline irá bloquear.
Seria uma pergunta válida, por que o pipeline é drenado. Por que o comando cat
está comprometido no terminal, deixando nada no circuito. Eu não sei disso.
Não, isso não é possível. Pelo menos não sem algum truque de descritor de arquivo sério, ou um loop como ADDB está mostrando em sua resposta .
Não há problemas reais reais suficientes para garantir a implementação da sintaxe para um pipeline circular de alimentação automática, e posso ver problemas em determinar quando o pipeline seria considerado "concluído", qual seria seu status de saída e como para garantir que não esteja bloqueando.
O único tipo de aplicações em que posso pensar no momento está no campo da análise numérica, ou em alguns outros campos computacionais, onde uma solução numérica é refinada usando um método iterativo até que uma estimativa de erro é reduzida abaixo de um certo ponto .
Esses tipos de problemas requerem aritmética de ponto flutuante (geralmente com alta precisão), o que não é suportado pela maioria dos shells. Esses problemas geralmente também exigem um ambiente de execução mais rápido do que o que um shell fornece.
Tags command-line pipe