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 -l
Isso 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
-n
do comandosed
significa não imprimir linhas por padrão. Op
no final do comandos///
significa imprimir a linha se houver uma substituição. Em suma, o comando imprimirá algo apenas se houver uma correspondência.