Você está confundindo dois tipos muito diferentes de entradas.
- Entrada padrão (
stdin) - Argumentos da linha de comando
Estes são diferentes e são úteis para diferentes propósitos. Alguns comandos podem receber entradas nos dois sentidos, mas eles normalmente os usam de maneira diferente. Tomemos por exemplo o comando wc :
-
Transmitindo entrada por
stdin:ls | wc -lIsso contará as linhas na saída de
ls -
Transmitindo entrada pelos argumentos da linha de comando:
wc -l $(ls)Isso contará as linhas na lista de arquivos impressos por
ls
Coisas completamente diferentes.
Para responder à sua pergunta, parece que você deseja capturar a taxa da saída do primeiro comando e usar a taxa como um argumento de linha de comando para o segundo comando. Aqui está uma maneira de fazer isso:
rate=$(command1 | sed -ne 's/^rate..\([0-9]*\)%.*//p')
command2 -t "rate was $rate"
Explicação do sed :
- O comando
s/pattern/replacement/substitui algum padrão - O padrão significa: a linha deve começar com "taxa" (
^rate) seguida por qualquer caractere dois (..), seguido por 0 ou mais dígitos, seguido por um%, seguido pelo restante o texto (.*) -
na substituição significa o conteúdo da primeira expressão capturada em\(...\), portanto, neste caso, os dígitos antes do sinal% - O sinalizador
-ndo comandosedsignifica não imprimir linhas por padrão. Opno final do comandos///significa imprimir a linha se houver uma substituição. Em suma, o comando imprimirá algo apenas se houver uma correspondência.